@fluidframework/tool-utils 2.0.0-internal.3.0.1 → 2.0.0-internal.3.1.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 (48) hide show
  1. package/.eslintrc.js +19 -23
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/fluidToolRC.d.ts.map +1 -1
  5. package/dist/fluidToolRC.js.map +1 -1
  6. package/dist/httpHelpers.d.ts.map +1 -1
  7. package/dist/httpHelpers.js +6 -2
  8. package/dist/httpHelpers.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/odspTokenManager.d.ts.map +1 -1
  13. package/dist/odspTokenManager.js +5 -2
  14. package/dist/odspTokenManager.js.map +1 -1
  15. package/dist/packageVersion.d.ts +1 -1
  16. package/dist/packageVersion.js +1 -1
  17. package/dist/packageVersion.js.map +1 -1
  18. package/dist/snapshotNormalizer.d.ts.map +1 -1
  19. package/dist/snapshotNormalizer.js +13 -10
  20. package/dist/snapshotNormalizer.js.map +1 -1
  21. package/lib/fluidToolRC.d.ts.map +1 -1
  22. package/lib/fluidToolRC.js.map +1 -1
  23. package/lib/httpHelpers.d.ts.map +1 -1
  24. package/lib/httpHelpers.js +6 -2
  25. package/lib/httpHelpers.js.map +1 -1
  26. package/lib/index.d.ts +1 -1
  27. package/lib/index.d.ts.map +1 -1
  28. package/lib/index.js +1 -1
  29. package/lib/index.js.map +1 -1
  30. package/lib/odspTokenManager.d.ts.map +1 -1
  31. package/lib/odspTokenManager.js +5 -2
  32. package/lib/odspTokenManager.js.map +1 -1
  33. package/lib/packageVersion.d.ts +1 -1
  34. package/lib/packageVersion.js +1 -1
  35. package/lib/packageVersion.js.map +1 -1
  36. package/lib/snapshotNormalizer.d.ts.map +1 -1
  37. package/lib/snapshotNormalizer.js +14 -11
  38. package/lib/snapshotNormalizer.js.map +1 -1
  39. package/package.json +103 -102
  40. package/prettier.config.cjs +1 -1
  41. package/src/fluidToolRC.ts +36 -36
  42. package/src/httpHelpers.ts +58 -44
  43. package/src/index.ts +5 -1
  44. package/src/odspTokenManager.ts +301 -309
  45. package/src/packageVersion.ts +1 -1
  46. package/src/snapshotNormalizer.ts +178 -171
  47. package/tsconfig.esnext.json +6 -6
  48. package/tsconfig.json +10 -16
@@ -11,54 +11,54 @@ import { lock } from "proper-lockfile";
11
11
  import { IOdspTokens } from "@fluidframework/odsp-doclib-utils";
12
12
 
13
13
  export interface IAsyncCache<TKey, TValue> {
14
- get(key: TKey): Promise<TValue | undefined>;
15
- save(key: TKey, value: TValue): Promise<void>;
16
- lock<T>(callback: () => Promise<T>): Promise<T>;
14
+ get(key: TKey): Promise<TValue | undefined>;
15
+ save(key: TKey, value: TValue): Promise<void>;
16
+ lock<T>(callback: () => Promise<T>): Promise<T>;
17
17
  }
18
18
 
19
19
  export interface IResources {
20
- tokens?: {
21
- version?: number;
22
- data: {
23
- [key: string]: {
24
- storage?: IOdspTokens;
25
- push?: IOdspTokens;
26
- };
27
- };
28
- };
20
+ tokens?: {
21
+ version?: number;
22
+ data: {
23
+ [key: string]: {
24
+ storage?: IOdspTokens;
25
+ push?: IOdspTokens;
26
+ };
27
+ };
28
+ };
29
29
  }
30
30
 
31
31
  const getRCFileName = () => path.join(os.homedir(), ".fluidtoolrc");
32
32
 
33
33
  export async function loadRC(): Promise<IResources> {
34
- const readFile = util.promisify(fs.readFile);
35
- const exists = util.promisify(fs.exists);
36
- const fileName = getRCFileName();
37
- if (await exists(fileName)) {
38
- const buf = await readFile(fileName);
39
- try {
40
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
41
- return JSON.parse(buf.toString("utf8"));
42
- } catch (e) {
43
- // Nothing
44
- }
45
- }
46
- return {};
34
+ const readFile = util.promisify(fs.readFile);
35
+ const exists = util.promisify(fs.exists);
36
+ const fileName = getRCFileName();
37
+ if (await exists(fileName)) {
38
+ const buf = await readFile(fileName);
39
+ try {
40
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
41
+ return JSON.parse(buf.toString("utf8"));
42
+ } catch (e) {
43
+ // Nothing
44
+ }
45
+ }
46
+ return {};
47
47
  }
48
48
 
49
49
  export async function saveRC(rc: IResources) {
50
- const writeFile = util.promisify(fs.writeFile);
51
- const content = JSON.stringify(rc, undefined, 2);
52
- return writeFile(getRCFileName(), Buffer.from(content, "utf8"));
50
+ const writeFile = util.promisify(fs.writeFile);
51
+ const content = JSON.stringify(rc, undefined, 2);
52
+ return writeFile(getRCFileName(), Buffer.from(content, "utf8"));
53
53
  }
54
54
 
55
55
  export async function lockRC() {
56
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
57
- return lock(getRCFileName(), {
58
- retries: {
59
- forever: true,
60
- },
61
- stale: 60000,
62
- realpath: false,
63
- });
56
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
57
+ return lock(getRCFileName(), {
58
+ retries: {
59
+ forever: true,
60
+ },
61
+ stale: 60000,
62
+ realpath: false,
63
+ });
64
64
  }
@@ -7,53 +7,67 @@ import http from "http";
7
7
  import { Socket } from "net";
8
8
 
9
9
  export interface ITrackedHttpServer {
10
- readonly server: http.Server;
11
- readonly sockets: Set<Socket>;
12
- fullyClose(): void;
10
+ readonly server: http.Server;
11
+ readonly sockets: Set<Socket>;
12
+ fullyClose(): void;
13
13
  }
14
- export function createTrackedServer(port: number, requestListener: http.RequestListener): ITrackedHttpServer {
15
- const server = http.createServer(requestListener).listen(port);
16
- const sockets = new Set<Socket>();
14
+ export function createTrackedServer(
15
+ port: number,
16
+ requestListener: http.RequestListener,
17
+ ): ITrackedHttpServer {
18
+ const server = http.createServer(requestListener).listen(port);
19
+ const sockets = new Set<Socket>();
17
20
 
18
- server.on("connection", (socket) => {
19
- sockets.add(socket);
20
- socket.on("close", () => sockets.delete(socket));
21
- });
21
+ server.on("connection", (socket) => {
22
+ sockets.add(socket);
23
+ socket.on("close", () => sockets.delete(socket));
24
+ });
22
25
 
23
- return {
24
- server, sockets, fullyClose() {
25
- server.close();
26
- sockets.forEach((socket) => socket.destroy());
27
- },
28
- };
26
+ return {
27
+ server,
28
+ sockets,
29
+ fullyClose() {
30
+ server.close();
31
+ sockets.forEach((socket) => socket.destroy());
32
+ },
33
+ };
29
34
  }
30
- export type OnceListenerHandler<T> = (req: http.IncomingMessage, res: http.ServerResponse) => Promise<T>;
35
+ export type OnceListenerHandler<T> = (
36
+ req: http.IncomingMessage,
37
+ res: http.ServerResponse,
38
+ ) => Promise<T>;
31
39
  export type OnceListenerResult<T> = Promise<() => Promise<T>>;
32
- export const serverListenAndHandle = async <T>(port: number, handler: OnceListenerHandler<T>): OnceListenerResult<T> =>
33
- // eslint-disable-next-line promise/param-names
34
- new Promise((outerResolve, outerReject) => {
35
- // eslint-disable-next-line promise/param-names
36
- const innerP = new Promise<T>((innerResolve, innerReject) => {
37
- const httpServer = createTrackedServer(port, (req, res) => {
38
- // ignore favicon
39
- if (req.url === "/favicon.ico") {
40
- res.writeHead(200, { "Content-Type": "image/x-icon" });
41
- res.end();
42
- return;
43
- }
44
- handler(req, res).finally(() => httpServer.fullyClose()).then(
45
- (result) => innerResolve(result),
46
- (error) => innerReject(error),
47
- );
48
- });
49
- outerResolve(async () => innerP);
50
- });
51
- });
40
+ export const serverListenAndHandle = async <T>(
41
+ port: number,
42
+ handler: OnceListenerHandler<T>,
43
+ ): OnceListenerResult<T> =>
44
+ // eslint-disable-next-line promise/param-names
45
+ new Promise((outerResolve, outerReject) => {
46
+ // eslint-disable-next-line promise/param-names
47
+ const innerP = new Promise<T>((innerResolve, innerReject) => {
48
+ const httpServer = createTrackedServer(port, (req, res) => {
49
+ // ignore favicon
50
+ if (req.url === "/favicon.ico") {
51
+ res.writeHead(200, { "Content-Type": "image/x-icon" });
52
+ res.end();
53
+ return;
54
+ }
55
+ handler(req, res)
56
+ .finally(() => httpServer.fullyClose())
57
+ .then(
58
+ (result) => innerResolve(result),
59
+ (error) => innerReject(error),
60
+ );
61
+ });
62
+ outerResolve(async () => innerP);
63
+ });
64
+ });
52
65
 
53
- export const endResponse = async (response: http.ServerResponse): Promise<void> => new Promise((resolve, reject) => {
54
- try {
55
- response.end(resolve);
56
- } catch (error) {
57
- reject(error);
58
- }
59
- });
66
+ export const endResponse = async (response: http.ServerResponse): Promise<void> =>
67
+ new Promise((resolve, reject) => {
68
+ try {
69
+ response.end(resolve);
70
+ } catch (error) {
71
+ reject(error);
72
+ }
73
+ });
package/src/index.ts CHANGED
@@ -11,4 +11,8 @@ export {
11
11
  OdspTokenManager,
12
12
  odspTokensCache,
13
13
  } from "./odspTokenManager";
14
- export { gcBlobPrefix, getNormalizedSnapshot, ISnapshotNormalizerConfig } from "./snapshotNormalizer";
14
+ export {
15
+ gcBlobPrefix,
16
+ getNormalizedSnapshot,
17
+ ISnapshotNormalizerConfig,
18
+ } from "./snapshotNormalizer";