@sasjs/utils 3.7.2 → 3.7.4

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 +1,8 @@
1
+ /**
2
+ * The line ending to join formatted rows with.
3
+ *
4
+ * process may not exist - the formatter runs in browsers, to build request
5
+ * bodies - so the platform is read defensively and a browser gets the unix
6
+ * ending.
7
+ */
1
8
  export declare const newLine: () => "\\r\\n" | "\\n";
@@ -1,9 +1,18 @@
1
1
  "use strict";
2
- // FIXME: if isWindows is used, it breaks cli.spec.ts because Logger is undefined
3
- // import { isWindows } from '../'
4
- // export const newLine = () => (isWindows() ? '\\r\\n' : '\\n')
2
+ // Kept self-contained rather than importing isWindows from '../': that module
3
+ // imports path and is loaded from the package root, which pulls Logger into
4
+ // this module and breaks cli.spec.ts with an undefined Logger.
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.newLine = void 0;
7
- const newLine = () => (process.platform === 'win32' ? '\\r\\n' : '\\n');
7
+ /**
8
+ * The line ending to join formatted rows with.
9
+ *
10
+ * process may not exist - the formatter runs in browsers, to build request
11
+ * bodies - so the platform is read defensively and a browser gets the unix
12
+ * ending.
13
+ */
14
+ const newLine = () => typeof process !== 'undefined' && process.platform === 'win32'
15
+ ? '\\r\\n'
16
+ : '\\n';
8
17
  exports.newLine = newLine;
9
18
  //# sourceMappingURL=regexp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"regexp.js","sourceRoot":"","sources":["../../src/formatter/regexp.ts"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,kCAAkC;AAClC,gEAAgE;;;AAEzD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAAjE,QAAA,OAAO,WAA0D"}
1
+ {"version":3,"file":"regexp.js","sourceRoot":"","sources":["../../src/formatter/regexp.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,4EAA4E;AAC5E,+DAA+D;;;AAE/D;;;;;;GAMG;AACI,MAAM,OAAO,GAAG,GAAG,EAAE,CAC1B,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;IAC5D,CAAC,CAAC,QAAQ;IACV,CAAC,CAAC,KAAK,CAAA;AAHE,QAAA,OAAO,WAGT"}
package/package.json CHANGED
@@ -95,5 +95,5 @@
95
95
  "jwt-decode": "4.0.0",
96
96
  "prompts": "2.4.2"
97
97
  },
98
- "version": "3.7.2"
98
+ "version": "3.7.4"
99
99
  }
package/utils/base64.js CHANGED
@@ -11,15 +11,35 @@ const PREFIX_HEX_LENGTH = 200;
11
11
  const randomHexPrefix = () => Array.from(crypto.getRandomValues(new Uint8Array(PREFIX_HEX_LENGTH / 2)))
12
12
  .map((byte) => byte.toString(16).padStart(2, '0'))
13
13
  .join('');
14
+ // Buffer does not exist in a browser, and this module is reachable from the
15
+ // package root, so the encoding uses the platform globals instead. TextEncoder
16
+ // and TextDecoder carry the UTF-8 step: btoa is latin1, so encoding a password
17
+ // through it directly corrupts anything non-ASCII. The binary string is built
18
+ // in chunks because spreading a whole byte array into String.fromCharCode
19
+ // overflows the call stack on long input.
20
+ const CHUNK_SIZE = 0x8000;
21
+ const toBase64 = (bytes) => {
22
+ let binary = '';
23
+ for (let offset = 0; offset < bytes.length; offset += CHUNK_SIZE) {
24
+ binary += String.fromCharCode(...bytes.subarray(offset, offset + CHUNK_SIZE));
25
+ }
26
+ return btoa(binary);
27
+ };
28
+ const fromBase64 = (str) => {
29
+ // Buffer ignores whitespace when decoding base64 and atob does not, so a
30
+ // wrapped or padded stored value still decodes.
31
+ const binary = atob(str.replace(/\s/g, ''));
32
+ return new TextDecoder().decode(Uint8Array.from(binary, (char) => char.charCodeAt(0)));
33
+ };
14
34
  const encodeToBase64 = (str) => {
15
- const encodedPassword = Buffer.from(randomHexPrefix() + str).toString('base64');
35
+ const encodedPassword = toBase64(new TextEncoder().encode(randomHexPrefix() + str));
16
36
  return PREFIX + encodedPassword;
17
37
  };
18
38
  exports.encodeToBase64 = encodeToBase64;
19
39
  const decodeFromBase64 = (str) => {
20
40
  if (str.startsWith(PREFIX)) {
21
41
  str = str.replace(/^{sasjs_encoded}/, '');
22
- const decodedPassword = Buffer.from(str, 'base64').toString();
42
+ const decodedPassword = fromBase64(str);
23
43
  return decodedPassword.substring(200);
24
44
  }
25
45
  return str;
@@ -1 +1 @@
1
- {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":";;;AAAA,MAAM,MAAM,GAAG,iBAAiB,CAAA;AAChC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAE7B,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,sEAAsE;AACtE,MAAM,eAAe,GAAG,GAAW,EAAE,CACnC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC;KACtE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KACjD,IAAI,CAAC,EAAE,CAAC,CAAA;AAEN,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE;IAC5C,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,CAAC,QAAQ,CACnE,QAAQ,CACT,CAAA;IACD,OAAO,MAAM,GAAG,eAAe,CAAA;AACjC,CAAC,CAAA;AALY,QAAA,cAAc,kBAK1B;AACM,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,EAAE;IAC9C,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC1B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC7D,OAAO,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;KACtC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAPY,QAAA,gBAAgB,oBAO5B"}
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":";;;AAAA,MAAM,MAAM,GAAG,iBAAiB,CAAA;AAChC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAE7B,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,sEAAsE;AACtE,MAAM,eAAe,GAAG,GAAW,EAAE,CACnC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC;KACtE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KACjD,IAAI,CAAC,EAAE,CAAC,CAAA;AAEb,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,0EAA0E;AAC1E,0CAA0C;AAC1C,MAAM,UAAU,GAAG,MAAM,CAAA;AAEzB,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAU,EAAE;IAC7C,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,EAAE;QAChE,MAAM,IAAI,MAAM,CAAC,YAAY,CAC3B,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAC/C,CAAA;KACF;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;IACzC,yEAAyE;IACzE,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;IAE3C,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAC7B,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACtD,CAAA;AACH,CAAC,CAAA;AAEM,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE;IAC5C,MAAM,eAAe,GAAG,QAAQ,CAC9B,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,CAClD,CAAA;IACD,OAAO,MAAM,GAAG,eAAe,CAAA;AACjC,CAAC,CAAA;AALY,QAAA,cAAc,kBAK1B;AAEM,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,EAAE;IAC9C,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC1B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QACvC,OAAO,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;KACtC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAPY,QAAA,gBAAgB,oBAO5B"}
package/utils/utils.d.ts CHANGED
@@ -1,6 +1,11 @@
1
1
  export declare function asyncForEach(array: any[], callback: (item: any, index: number, originalArray: any[]) => any): Promise<void>;
2
2
  export declare const uuidv4: () => string;
3
3
  export declare const uniqArray: (data: any[]) => any[];
4
+ /**
5
+ * Whether the host is Windows. process may not exist - these helpers are
6
+ * exported from the package root and called from browser code - so the
7
+ * platform is read defensively and a browser answers false.
8
+ */
4
9
  export declare const isWindows: () => boolean;
5
10
  export declare const isLinux: () => boolean;
6
11
  /**
package/utils/utils.js CHANGED
@@ -29,9 +29,14 @@ const uuidv4 = () => 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c)
29
29
  exports.uuidv4 = uuidv4;
30
30
  const uniqArray = (data) => Array.from(new Set(data));
31
31
  exports.uniqArray = uniqArray;
32
- const isWindows = () => process.platform === 'win32';
32
+ /**
33
+ * Whether the host is Windows. process may not exist - these helpers are
34
+ * exported from the package root and called from browser code - so the
35
+ * platform is read defensively and a browser answers false.
36
+ */
37
+ const isWindows = () => typeof process !== 'undefined' && process.platform === 'win32';
33
38
  exports.isWindows = isWindows;
34
- const isLinux = () => process.platform === 'linux';
39
+ const isLinux = () => typeof process !== 'undefined' && process.platform === 'linux';
35
40
  exports.isLinux = isLinux;
36
41
  /**
37
42
  * replace single backslash with double backslash
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAuB;AAEvB,SAAsB,YAAY,CAChC,KAAY,EACZ,QAAiE;;QAEjE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;SAC3C;IACH,CAAC;CAAA;AAPD,oCAOC;AAEM,MAAM,MAAM,GAAG,GAAG,EAAE,CACzB,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;IAC5D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAChC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;IAEpC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA;AANS,QAAA,MAAM,UAMf;AAEG,MAAM,SAAS,GAAG,CAAC,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AAAtD,QAAA,SAAS,aAA6C;AAE5D,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAA9C,QAAA,SAAS,aAAqC;AAEpD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AAA5C,QAAA,OAAO,WAAqC;AAEzD;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/C,IAAA,iBAAS,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AADrC,QAAA,gBAAgB,oBACqB;AAE3C,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AAA1D,QAAA,aAAa,iBAA6C;AAEvE;;;GAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,YAAoB,EAAE,EAAE,CACzD,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AADrB,QAAA,kBAAkB,sBACG"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAuB;AAEvB,SAAsB,YAAY,CAChC,KAAY,EACZ,QAAiE;;QAEjE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;SAC3C;IACH,CAAC;CAAA;AAPD,oCAOC;AAEM,MAAM,MAAM,GAAG,GAAG,EAAE,CACzB,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;IAC5D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAChC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;IAEpC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA;AANS,QAAA,MAAM,UAMf;AAEG,MAAM,SAAS,GAAG,CAAC,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;AAAtD,QAAA,SAAS,aAA6C;AAEnE;;;;GAIG;AACI,MAAM,SAAS,GAAG,GAAG,EAAE,CAC5B,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AADnD,QAAA,SAAS,aAC0C;AAEzD,MAAM,OAAO,GAAG,GAAG,EAAE,CAC1B,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;AADnD,QAAA,OAAO,WAC4C;AAEhE;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/C,IAAA,iBAAS,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AADrC,QAAA,gBAAgB,oBACqB;AAE3C,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AAA1D,QAAA,aAAa,iBAA6C;AAEvE;;;GAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,YAAoB,EAAE,EAAE,CACzD,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AADrB,QAAA,kBAAkB,sBACG"}