@dbx-tools/shared-core 0.6.89 → 0.6.91

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.
package/index.ts CHANGED
@@ -2,9 +2,9 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
+ export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-core";
5
6
  export * as async from "./src/async.ts";
6
7
  export * as brand from "./src/brand.ts";
7
- export * as context from "./src/context.ts";
8
8
  export * as error from "./src/error.ts";
9
9
  export * as execution from "./src/execution.ts";
10
10
  export * as functionModule from "./src/function.ts";
@@ -21,7 +21,6 @@ export * as token from "./src/token.ts";
21
21
  export type { PollContext, PollProducer, PollOptions } from "./src/async.ts";
22
22
  export { DEFAULT_BRAND_ASSETS, BrandAssetSetSchema, BrandColorsSchema, BrandVoiceSchema, BrandContextSchema, defaultBrandContext } from "./src/brand.ts";
23
23
  export type { BrandContext, BrandContextInput, BrandAssetSet } from "./src/brand.ts";
24
- export type { ContextLoader } from "./src/context.ts";
25
24
  export type { ErrorContext } from "./src/error.ts";
26
25
  export type { ExecutionResult, Executor, ExecutionFailure, RunOptions } from "./src/execution.ts";
27
26
  export type { MemoizeOptions } from "./src/function.ts";
package/lib/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
+ export declare const PACKAGE_IDENTIFIER = "@dbx-tools/shared-core";
1
2
  export * as async from "./src/async.ts";
2
3
  export * as brand from "./src/brand.ts";
3
- export * as context from "./src/context.ts";
4
4
  export * as error from "./src/error.ts";
5
5
  export * as execution from "./src/execution.ts";
6
6
  export * as functionModule from "./src/function.ts";
@@ -17,7 +17,6 @@ export * as token from "./src/token.ts";
17
17
  export type { PollContext, PollProducer, PollOptions } from "./src/async.ts";
18
18
  export { DEFAULT_BRAND_ASSETS, BrandAssetSetSchema, BrandColorsSchema, BrandVoiceSchema, BrandContextSchema, defaultBrandContext } from "./src/brand.ts";
19
19
  export type { BrandContext, BrandContextInput, BrandAssetSet } from "./src/brand.ts";
20
- export type { ContextLoader } from "./src/context.ts";
21
20
  export type { ErrorContext } from "./src/error.ts";
22
21
  export type { ExecutionResult, Executor, ExecutionFailure, RunOptions } from "./src/execution.ts";
23
22
  export type { MemoizeOptions } from "./src/function.ts";
package/lib/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  // GENERATED by projen watch - DO NOT EDIT.
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
+ export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-core";
4
5
  export * as async from "./src/async.js";
5
6
  export * as brand from "./src/brand.js";
6
- export * as context from "./src/context.js";
7
7
  export * as error from "./src/error.js";
8
8
  export * as execution from "./src/execution.js";
9
9
  export * as functionModule from "./src/function.js";
@@ -19,4 +19,4 @@ export * as string from "./src/string.js";
19
19
  export * as token from "./src/token.js";
20
20
  export { DEFAULT_BRAND_ASSETS, BrandAssetSetSchema, BrandColorsSchema, BrandVoiceSchema, BrandContextSchema, defaultBrandContext } from "./src/brand.js";
21
21
  export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER } from "./src/token.js";
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFhekosT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0ICogYXMgYXN5bmMgZnJvbSBcIi4vc3JjL2FzeW5jLnRzXCI7XG5leHBvcnQgKiBhcyBicmFuZCBmcm9tIFwiLi9zcmMvYnJhbmQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbnRleHQgZnJvbSBcIi4vc3JjL2NvbnRleHQudHNcIjtcbmV4cG9ydCAqIGFzIGVycm9yIGZyb20gXCIuL3NyYy9lcnJvci50c1wiO1xuZXhwb3J0ICogYXMgZXhlY3V0aW9uIGZyb20gXCIuL3NyYy9leGVjdXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGZ1bmN0aW9uTW9kdWxlIGZyb20gXCIuL3NyYy9mdW5jdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgaGFzaCBmcm9tIFwiLi9zcmMvaGFzaC50c1wiO1xuZXhwb3J0ICogYXMgaHR0cCBmcm9tIFwiLi9zcmMvaHR0cC50c1wiO1xuZXhwb3J0ICogYXMganNvbiBmcm9tIFwiLi9zcmMvanNvbi50c1wiO1xuZXhwb3J0ICogYXMgbG9nIGZyb20gXCIuL3NyYy9sb2cudHNcIjtcbmV4cG9ydCAqIGFzIG5ldCBmcm9tIFwiLi9zcmMvbmV0LnRzXCI7XG5leHBvcnQgKiBhcyBvYmplY3QgZnJvbSBcIi4vc3JjL29iamVjdC50c1wiO1xuZXhwb3J0ICogYXMgcGF0dGVybiBmcm9tIFwiLi9zcmMvcGF0dGVybi50c1wiO1xuZXhwb3J0ICogYXMgcHJlZGljYXRlIGZyb20gXCIuL3NyYy9wcmVkaWNhdGUudHNcIjtcbmV4cG9ydCAqIGFzIHN0cmluZyBmcm9tIFwiLi9zcmMvc3RyaW5nLnRzXCI7XG5leHBvcnQgKiBhcyB0b2tlbiBmcm9tIFwiLi9zcmMvdG9rZW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgUG9sbENvbnRleHQsIFBvbGxQcm9kdWNlciwgUG9sbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvYXN5bmMudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfQlJBTkRfQVNTRVRTLCBCcmFuZEFzc2V0U2V0U2NoZW1hLCBCcmFuZENvbG9yc1NjaGVtYSwgQnJhbmRWb2ljZVNjaGVtYSwgQnJhbmRDb250ZXh0U2NoZW1hLCBkZWZhdWx0QnJhbmRDb250ZXh0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCwgQnJhbmRDb250ZXh0SW5wdXQsIEJyYW5kQXNzZXRTZXQgfSBmcm9tIFwiLi9zcmMvYnJhbmQudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29udGV4dExvYWRlciB9IGZyb20gXCIuL3NyYy9jb250ZXh0LnRzXCI7XG5leHBvcnQgdHlwZSB7IEVycm9yQ29udGV4dCB9IGZyb20gXCIuL3NyYy9lcnJvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBFeGVjdXRpb25SZXN1bHQsIEV4ZWN1dG9yLCBFeGVjdXRpb25GYWlsdXJlLCBSdW5PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2V4ZWN1dGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZW1vaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9mdW5jdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBIZWFkZXJMaWtlIH0gZnJvbSBcIi4vc3JjL2h0dHAudHNcIjtcbmV4cG9ydCB0eXBlIHsgTG9nTGV2ZWwsIExvZ2dlciB9IGZyb20gXCIuL3NyYy9sb2cudHNcIjtcbmV4cG9ydCB0eXBlIHsgVXJsTGlrZSwgSXBWZXJzaW9uLCBQYXJzZWRJcCwgQ2lkciwgVXJsQnVpbGRlciwgUGFyc2VFbWFpbHNPcHRpb25zIH0gZnJvbSBcIi4vc3JjL25ldC50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZXF1ZW5jZSwgQ29udGFpbmVyLCBDb2xsZWN0aW9uLCBPbmVPck1hbnksIE5hbWVMaWtlLCBOb25GdW5jdGlvbktleXMsIFNlcmlhbGl6YWJsZVByaW1pdGl2ZSwgU2VyaWFsaXphYmxlVmFsdWUsIFRvTnVtYmVyT3B0aW9ucywgVG9EYXRlT3B0aW9ucywgVG9EdXJhdGlvbk9wdGlvbnMsIERlZXBFcXVhbENvbXBhcmF0b3IgfSBmcm9tIFwiLi9zcmMvb2JqZWN0LnRzXCI7XG5leHBvcnQgdHlwZSB7IFBhdHRlcm5PcHRpb25zIH0gZnJvbSBcIi4vc3JjL3BhdHRlcm4udHNcIjtcbmV4cG9ydCB0eXBlIHsgUHJlZGljYXRlRnVuY3Rpb24sIFR5cGVQcmVkaWNhdGVGdW5jdGlvbiwgUHJlZGljYXRlSW5wdXQsIFByZWRpY2F0ZSB9IGZyb20gXCIuL3NyYy9wcmVkaWNhdGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgVG9rZW5pemVPcHRpb25zLCBLZXlPcHRpb25zLCBJZGVudGlmaWVyT3B0aW9ucywgRGVzY3JpcHRpb24gfSBmcm9tIFwiLi9zcmMvc3RyaW5nLnRzXCI7XG5leHBvcnQgeyBBQ0NFU1NfVE9LRU5fSEVBREVSLCBVU0VSX0lEX0hFQURFUiwgVVNFUl9FTUFJTF9IRUFERVIgfSBmcm9tIFwiLi9zcmMvdG9rZW4udHNcIjtcbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxjQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBWXpKLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmV4cG9ydCAqIGFzIGFzeW5jIGZyb20gXCIuL3NyYy9hc3luYy50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmQgZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgKiBhcyBlcnJvciBmcm9tIFwiLi9zcmMvZXJyb3IudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWN1dGlvbiBmcm9tIFwiLi9zcmMvZXhlY3V0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBmdW5jdGlvbk1vZHVsZSBmcm9tIFwiLi9zcmMvZnVuY3Rpb24udHNcIjtcbmV4cG9ydCAqIGFzIGhhc2ggZnJvbSBcIi4vc3JjL2hhc2gudHNcIjtcbmV4cG9ydCAqIGFzIGh0dHAgZnJvbSBcIi4vc3JjL2h0dHAudHNcIjtcbmV4cG9ydCAqIGFzIGpzb24gZnJvbSBcIi4vc3JjL2pzb24udHNcIjtcbmV4cG9ydCAqIGFzIGxvZyBmcm9tIFwiLi9zcmMvbG9nLnRzXCI7XG5leHBvcnQgKiBhcyBuZXQgZnJvbSBcIi4vc3JjL25ldC50c1wiO1xuZXhwb3J0ICogYXMgb2JqZWN0IGZyb20gXCIuL3NyYy9vYmplY3QudHNcIjtcbmV4cG9ydCAqIGFzIHBhdHRlcm4gZnJvbSBcIi4vc3JjL3BhdHRlcm4udHNcIjtcbmV4cG9ydCAqIGFzIHByZWRpY2F0ZSBmcm9tIFwiLi9zcmMvcHJlZGljYXRlLnRzXCI7XG5leHBvcnQgKiBhcyBzdHJpbmcgZnJvbSBcIi4vc3JjL3N0cmluZy50c1wiO1xuZXhwb3J0ICogYXMgdG9rZW4gZnJvbSBcIi4vc3JjL3Rva2VuLnRzXCI7XG5leHBvcnQgdHlwZSB7IFBvbGxDb250ZXh0LCBQb2xsUHJvZHVjZXIsIFBvbGxPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2FzeW5jLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0JSQU5EX0FTU0VUUywgQnJhbmRBc3NldFNldFNjaGVtYSwgQnJhbmRDb2xvcnNTY2hlbWEsIEJyYW5kVm9pY2VTY2hlbWEsIEJyYW5kQ29udGV4dFNjaGVtYSwgZGVmYXVsdEJyYW5kQ29udGV4dCB9IGZyb20gXCIuL3NyYy9icmFuZC50c1wiO1xuZXhwb3J0IHR5cGUgeyBCcmFuZENvbnRleHQsIEJyYW5kQ29udGV4dElucHV0LCBCcmFuZEFzc2V0U2V0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgdHlwZSB7IEVycm9yQ29udGV4dCB9IGZyb20gXCIuL3NyYy9lcnJvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBFeGVjdXRpb25SZXN1bHQsIEV4ZWN1dG9yLCBFeGVjdXRpb25GYWlsdXJlLCBSdW5PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2V4ZWN1dGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZW1vaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9mdW5jdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBIZWFkZXJMaWtlIH0gZnJvbSBcIi4vc3JjL2h0dHAudHNcIjtcbmV4cG9ydCB0eXBlIHsgTG9nTGV2ZWwsIExvZ2dlciB9IGZyb20gXCIuL3NyYy9sb2cudHNcIjtcbmV4cG9ydCB0eXBlIHsgVXJsTGlrZSwgSXBWZXJzaW9uLCBQYXJzZWRJcCwgQ2lkciwgVXJsQnVpbGRlciwgUGFyc2VFbWFpbHNPcHRpb25zIH0gZnJvbSBcIi4vc3JjL25ldC50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZXF1ZW5jZSwgQ29udGFpbmVyLCBDb2xsZWN0aW9uLCBPbmVPck1hbnksIE5hbWVMaWtlLCBOb25GdW5jdGlvbktleXMsIFNlcmlhbGl6YWJsZVByaW1pdGl2ZSwgU2VyaWFsaXphYmxlVmFsdWUsIFRvTnVtYmVyT3B0aW9ucywgVG9EYXRlT3B0aW9ucywgVG9EdXJhdGlvbk9wdGlvbnMsIERlZXBFcXVhbENvbXBhcmF0b3IgfSBmcm9tIFwiLi9zcmMvb2JqZWN0LnRzXCI7XG5leHBvcnQgdHlwZSB7IFBhdHRlcm5PcHRpb25zIH0gZnJvbSBcIi4vc3JjL3BhdHRlcm4udHNcIjtcbmV4cG9ydCB0eXBlIHsgUHJlZGljYXRlRnVuY3Rpb24sIFR5cGVQcmVkaWNhdGVGdW5jdGlvbiwgUHJlZGljYXRlSW5wdXQsIFByZWRpY2F0ZSB9IGZyb20gXCIuL3NyYy9wcmVkaWNhdGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgVG9rZW5pemVPcHRpb25zLCBLZXlPcHRpb25zLCBJZGVudGlmaWVyT3B0aW9ucywgRGVzY3JpcHRpb24gfSBmcm9tIFwiLi9zcmMvc3RyaW5nLnRzXCI7XG5leHBvcnQgeyBBQ0NFU1NfVE9LRU5fSEVBREVSLCBVU0VSX0lEX0hFQURFUiwgVVNFUl9FTUFJTF9IRUFERVIgfSBmcm9tIFwiLi9zcmMvdG9rZW4udHNcIjtcbiJdfQ==
@@ -1 +1 @@
1
- {"root":["../src/async.ts","../src/brand.ts","../src/context.ts","../src/error.ts","../src/execution.ts","../src/function.ts","../src/hash.ts","../src/http.ts","../src/json.ts","../src/log.ts","../src/net.ts","../src/object.ts","../src/pattern.ts","../src/predicate.ts","../src/string.ts","../src/token.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/async.ts","../src/brand.ts","../src/error.ts","../src/execution.ts","../src/function.ts","../src/hash.ts","../src/http.ts","../src/json.ts","../src/log.ts","../src/net.ts","../src/object.ts","../src/pattern.ts","../src/predicate.ts","../src/string.ts","../src/token.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -18,6 +18,7 @@
18
18
  "projen": "projen"
19
19
  },
20
20
  "devDependencies": {
21
+ "@dbx-tools/test-polyglot": "0.6.91",
21
22
  "@types/bun": "^1.3.14",
22
23
  "@types/node": "^24.6.0",
23
24
  "consola": "^3.4.2",
@@ -43,7 +44,7 @@
43
44
  "./package.json": "./package.json"
44
45
  }
45
46
  },
46
- "version": "0.6.89",
47
+ "version": "0.6.91",
47
48
  "types": "./lib/index.d.ts",
48
49
  "type": "module",
49
50
  "exports": {
@@ -1,64 +0,0 @@
1
- /**
2
- * The ambient CONTEXT a cached value belongs to, and a cache keyed by it.
3
- *
4
- * Most of the expensive lookups in this repo are pure functions of the directory
5
- * (or the page) they were asked from: `npm prefix`, `git rev-parse`, a `.env`
6
- * file, `databricks bundle validate`. Memoizing them with
7
- * {@link functionModule.memoize} is wrong in exactly one situation, and it is the
8
- * situation a CLI hits: the process changes directory, and the cached answer now
9
- * describes somewhere else. Every caller therefore grew the same guard - resolve
10
- * `cwd`, compare it against `process.cwd()`, and skip the cache when they differ
11
- * (see the `cacheEnabled` dance this module replaced in node-core's `project`).
12
- *
13
- * This is that guard, once. A cache slot stores the context it was loaded under,
14
- * so a context change (a moved `cwd`, a different origin) MISSES rather than
15
- * returns a stale value, and a lookup for some OTHER directory is not cached at
16
- * all - one off-context call must not evict or poison the hot path.
17
- *
18
- * The context is the process working directory on a server and
19
- * `location.origin` in a browser, whichever this runtime has. Browser-safe:
20
- * `process` and `location` are reached through `globalThis` and guarded, so this
21
- * module needs no Node types and simply has no context off-process.
22
- *
23
- * @example
24
- * const roots = context.cached(["project", "npm", "prefix"], (cwd) =>
25
- * spawnSync("npm", ["prefix"], { cwd }),
26
- * );
27
- *
28
- * @module
29
- */
30
- import type { OneOrMany } from "./object.ts";
31
- /** A loader for a cached value; receives the resolved context. */
32
- export type ContextLoader<T> = (context: string | undefined) => T;
33
- /**
34
- * The current context: the process working directory, else `location.origin`,
35
- * else `undefined` (a runtime with neither, where nothing is cacheable).
36
- */
37
- export declare function getContext(): string | undefined;
38
- /**
39
- * Whether `value` names a context this runtime is CURRENTLY in - the live `cwd`
40
- * or origin. This is the cacheability test: a value loaded for some other
41
- * directory is correct but not shareable, so it is never stored.
42
- */
43
- export declare function isContext(value: unknown): boolean;
44
- /**
45
- * Load `name` through `loader`, reusing the cached value while the context is
46
- * unchanged.
47
- *
48
- * `context` selects what the value is loaded FOR: omitted, `null`, or `"."` mean
49
- * the current context. It is passed straight to `loader`, so a loader never has
50
- * to reach for `process.cwd()` itself.
51
- *
52
- * Caching happens only when the resolved context is one this runtime is in
53
- * ({@link isContext}), so `cached(name, loader, "/somewhere/else")` always calls
54
- * `loader` and stores nothing. A stored entry remembers its context and is
55
- * discarded on the next call once that context changes. A thrown error is never
56
- * cached; a rejected promise evicts its entry so a later call retries.
57
- *
58
- * `name` identifies the slot and must be stable across calls - pass a
59
- * module-qualified list of string parts (`["project", command, ...args]`) so two
60
- * modules cannot collide on one slot.
61
- */
62
- export declare function cached<T>(name: OneOrMany<string>, loader: ContextLoader<T>, context?: string | null): T;
63
- /** Drop one cached slot, or the whole cache when `name` is omitted. */
64
- export declare function clear(name?: OneOrMany<string>): void;
@@ -1,148 +0,0 @@
1
- /**
2
- * The ambient CONTEXT a cached value belongs to, and a cache keyed by it.
3
- *
4
- * Most of the expensive lookups in this repo are pure functions of the directory
5
- * (or the page) they were asked from: `npm prefix`, `git rev-parse`, a `.env`
6
- * file, `databricks bundle validate`. Memoizing them with
7
- * {@link functionModule.memoize} is wrong in exactly one situation, and it is the
8
- * situation a CLI hits: the process changes directory, and the cached answer now
9
- * describes somewhere else. Every caller therefore grew the same guard - resolve
10
- * `cwd`, compare it against `process.cwd()`, and skip the cache when they differ
11
- * (see the `cacheEnabled` dance this module replaced in node-core's `project`).
12
- *
13
- * This is that guard, once. A cache slot stores the context it was loaded under,
14
- * so a context change (a moved `cwd`, a different origin) MISSES rather than
15
- * returns a stale value, and a lookup for some OTHER directory is not cached at
16
- * all - one off-context call must not evict or poison the hot path.
17
- *
18
- * The context is the process working directory on a server and
19
- * `location.origin` in a browser, whichever this runtime has. Browser-safe:
20
- * `process` and `location` are reached through `globalThis` and guarded, so this
21
- * module needs no Node types and simply has no context off-process.
22
- *
23
- * @example
24
- * const roots = context.cached(["project", "npm", "prefix"], (cwd) =>
25
- * spawnSync("npm", ["prefix"], { cwd }),
26
- * );
27
- *
28
- * @module
29
- */
30
- const CACHE = new Map();
31
- /**
32
- * The current context: the process working directory, else `location.origin`,
33
- * else `undefined` (a runtime with neither, where nothing is cacheable).
34
- */
35
- export function getContext() {
36
- for (const context of getContexts())
37
- return context;
38
- return undefined;
39
- }
40
- /**
41
- * Whether `value` names a context this runtime is CURRENTLY in - the live `cwd`
42
- * or origin. This is the cacheability test: a value loaded for some other
43
- * directory is correct but not shareable, so it is never stored.
44
- */
45
- export function isContext(value) {
46
- const context = toContext(value);
47
- if (context === undefined)
48
- return false;
49
- for (const candidate of getContexts()) {
50
- if (candidate === context)
51
- return true;
52
- }
53
- return false;
54
- }
55
- /**
56
- * Load `name` through `loader`, reusing the cached value while the context is
57
- * unchanged.
58
- *
59
- * `context` selects what the value is loaded FOR: omitted, `null`, or `"."` mean
60
- * the current context. It is passed straight to `loader`, so a loader never has
61
- * to reach for `process.cwd()` itself.
62
- *
63
- * Caching happens only when the resolved context is one this runtime is in
64
- * ({@link isContext}), so `cached(name, loader, "/somewhere/else")` always calls
65
- * `loader` and stores nothing. A stored entry remembers its context and is
66
- * discarded on the next call once that context changes. A thrown error is never
67
- * cached; a rejected promise evicts its entry so a later call retries.
68
- *
69
- * `name` identifies the slot and must be stable across calls - pass a
70
- * module-qualified list of string parts (`["project", command, ...args]`) so two
71
- * modules cannot collide on one slot.
72
- */
73
- export function cached(name, loader, context) {
74
- const resolved = toContext(context) ?? getContext();
75
- const key = resolved !== undefined && isContext(resolved) ? cacheKey(name) : undefined;
76
- if (key !== undefined) {
77
- const entry = CACHE.get(key);
78
- if (entry && entry.context === resolved)
79
- return entry.value;
80
- }
81
- const value = loader(resolved);
82
- if (key !== undefined && resolved !== undefined) {
83
- const entry = { context: resolved, value };
84
- CACHE.set(key, entry);
85
- if (isThenable(value)) {
86
- void Promise.resolve(value).catch(() => {
87
- if (CACHE.get(key) === entry)
88
- CACHE.delete(key);
89
- });
90
- }
91
- }
92
- return value;
93
- }
94
- /** Drop one cached slot, or the whole cache when `name` is omitted. */
95
- export function clear(name) {
96
- if (name === undefined)
97
- CACHE.clear();
98
- else
99
- CACHE.delete(cacheKey(name));
100
- }
101
- /**
102
- * Canonical slot key. `JSON.stringify` over the parts rather than a hash: the
103
- * parts are already strings, and an exact key cannot collide two unrelated
104
- * lookups onto one slot the way a truncated digest can.
105
- */
106
- function cacheKey(name) {
107
- return JSON.stringify(typeof name === "string" ? [name] : name);
108
- }
109
- /**
110
- * Every context this runtime reports, in precedence order. A server yields its
111
- * `cwd`; a browser yields `location.origin`. A hybrid (a worker with both) yields
112
- * both, which is what makes {@link isContext} accept either.
113
- */
114
- function* getContexts() {
115
- const global = globalThis;
116
- const cwd = global.process?.cwd;
117
- if (typeof cwd === "function") {
118
- let current;
119
- try {
120
- current = cwd();
121
- }
122
- catch {
123
- current = undefined;
124
- }
125
- const context = toContext(current);
126
- if (context !== undefined)
127
- yield context;
128
- }
129
- const origin = toContext(global.location?.origin);
130
- if (origin !== undefined)
131
- yield origin;
132
- }
133
- /** A non-blank string, with `"."` treated as "the current context" (unresolved). */
134
- function toContext(value) {
135
- if (typeof value !== "string")
136
- return undefined;
137
- const trimmed = value.trim();
138
- return trimmed && trimmed !== "." ? trimmed : undefined;
139
- }
140
- /** Duck-type any value with a callable `.then` as a thenable. */
141
- function isThenable(value) {
142
- return (value instanceof Promise ||
143
- (typeof value === "object" &&
144
- value !== null &&
145
- "then" in value &&
146
- typeof value.then === "function"));
147
- }
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBWUgsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7QUFFNUM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxXQUFXLEVBQUU7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUNwRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYztJQUN0QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsSUFBSSxPQUFPLEtBQUssU0FBUztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFNBQVMsS0FBSyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ3BCLElBQXVCLEVBQ3ZCLE1BQXdCLEVBQ3hCLE9BQXVCO0lBRXZCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNwRCxNQUFNLEdBQUcsR0FBRyxRQUFRLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkYsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEIsTUFBTSxLQUFLLEdBQUcsS0FB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QUFNLElBQUksS0FBSztZQUNmLE9BQVEsS0FBOEIsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQzlELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYW1iaWVudCBDT05URVhUIGEgY2FjaGVkIHZhbHVlIGJlbG9uZ3MgdG8sIGFuZCBhIGNhY2hlIGtleWVkIGJ5IGl0LlxuICpcbiAqIE1vc3Qgb2YgdGhlIGV4cGVuc2l2ZSBsb29rdXBzIGluIHRoaXMgcmVwbyBhcmUgcHVyZSBmdW5jdGlvbnMgb2YgdGhlIGRpcmVjdG9yeVxuICogKG9yIHRoZSBwYWdlKSB0aGV5IHdlcmUgYXNrZWQgZnJvbTogYG5wbSBwcmVmaXhgLCBgZ2l0IHJldi1wYXJzZWAsIGEgYC5lbnZgXG4gKiBmaWxlLCBgZGF0YWJyaWNrcyBidW5kbGUgdmFsaWRhdGVgLiBNZW1vaXppbmcgdGhlbSB3aXRoXG4gKiB7QGxpbmsgZnVuY3Rpb25Nb2R1bGUubWVtb2l6ZX0gaXMgd3JvbmcgaW4gZXhhY3RseSBvbmUgc2l0dWF0aW9uLCBhbmQgaXQgaXMgdGhlXG4gKiBzaXR1YXRpb24gYSBDTEkgaGl0czogdGhlIHByb2Nlc3MgY2hhbmdlcyBkaXJlY3RvcnksIGFuZCB0aGUgY2FjaGVkIGFuc3dlciBub3dcbiAqIGRlc2NyaWJlcyBzb21ld2hlcmUgZWxzZS4gRXZlcnkgY2FsbGVyIHRoZXJlZm9yZSBncmV3IHRoZSBzYW1lIGd1YXJkIC0gcmVzb2x2ZVxuICogYGN3ZGAsIGNvbXBhcmUgaXQgYWdhaW5zdCBgcHJvY2Vzcy5jd2QoKWAsIGFuZCBza2lwIHRoZSBjYWNoZSB3aGVuIHRoZXkgZGlmZmVyXG4gKiAoc2VlIHRoZSBgY2FjaGVFbmFibGVkYCBkYW5jZSB0aGlzIG1vZHVsZSByZXBsYWNlZCBpbiBub2RlLWNvcmUncyBgcHJvamVjdGApLlxuICpcbiAqIFRoaXMgaXMgdGhhdCBndWFyZCwgb25jZS4gQSBjYWNoZSBzbG90IHN0b3JlcyB0aGUgY29udGV4dCBpdCB3YXMgbG9hZGVkIHVuZGVyLFxuICogc28gYSBjb250ZXh0IGNoYW5nZSAoYSBtb3ZlZCBgY3dkYCwgYSBkaWZmZXJlbnQgb3JpZ2luKSBNSVNTRVMgcmF0aGVyIHRoYW5cbiAqIHJldHVybnMgYSBzdGFsZSB2YWx1ZSwgYW5kIGEgbG9va3VwIGZvciBzb21lIE9USEVSIGRpcmVjdG9yeSBpcyBub3QgY2FjaGVkIGF0XG4gKiBhbGwgLSBvbmUgb2ZmLWNvbnRleHQgY2FsbCBtdXN0IG5vdCBldmljdCBvciBwb2lzb24gdGhlIGhvdCBwYXRoLlxuICpcbiAqIFRoZSBjb250ZXh0IGlzIHRoZSBwcm9jZXNzIHdvcmtpbmcgZGlyZWN0b3J5IG9uIGEgc2VydmVyIGFuZFxuICogYGxvY2F0aW9uLm9yaWdpbmAgaW4gYSBicm93c2VyLCB3aGljaGV2ZXIgdGhpcyBydW50aW1lIGhhcy4gQnJvd3Nlci1zYWZlOlxuICogYHByb2Nlc3NgIGFuZCBgbG9jYXRpb25gIGFyZSByZWFjaGVkIHRocm91Z2ggYGdsb2JhbFRoaXNgIGFuZCBndWFyZGVkLCBzbyB0aGlzXG4gKiBtb2R1bGUgbmVlZHMgbm8gTm9kZSB0eXBlcyBhbmQgc2ltcGx5IGhhcyBubyBjb250ZXh0IG9mZi1wcm9jZXNzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByb290cyA9IGNvbnRleHQuY2FjaGVkKFtcInByb2plY3RcIiwgXCJucG1cIiwgXCJwcmVmaXhcIl0sIChjd2QpID0+XG4gKiAgIHNwYXduU3luYyhcIm5wbVwiLCBbXCJwcmVmaXhcIl0sIHsgY3dkIH0pLFxuICogKTtcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBPbmVPck1hbnkgfSBmcm9tIFwiLi9vYmplY3QudHNcIjtcblxuLyoqIEEgbG9hZGVyIGZvciBhIGNhY2hlZCB2YWx1ZTsgcmVjZWl2ZXMgdGhlIHJlc29sdmVkIGNvbnRleHQuICovXG5leHBvcnQgdHlwZSBDb250ZXh0TG9hZGVyPFQ+ID0gKGNvbnRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gVDtcblxuaW50ZXJmYWNlIENhY2hlRW50cnkge1xuICBjb250ZXh0OiBzdHJpbmc7XG4gIHZhbHVlOiB1bmtub3duO1xufVxuXG5jb25zdCBDQUNIRSA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZUVudHJ5PigpO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IGNvbnRleHQ6IHRoZSBwcm9jZXNzIHdvcmtpbmcgZGlyZWN0b3J5LCBlbHNlIGBsb2NhdGlvbi5vcmlnaW5gLFxuICogZWxzZSBgdW5kZWZpbmVkYCAoYSBydW50aW1lIHdpdGggbmVpdGhlciwgd2hlcmUgbm90aGluZyBpcyBjYWNoZWFibGUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGNvbnRleHQgb2YgZ2V0Q29udGV4dHMoKSkgcmV0dXJuIGNvbnRleHQ7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV2hldGhlciBgdmFsdWVgIG5hbWVzIGEgY29udGV4dCB0aGlzIHJ1bnRpbWUgaXMgQ1VSUkVOVExZIGluIC0gdGhlIGxpdmUgYGN3ZGBcbiAqIG9yIG9yaWdpbi4gVGhpcyBpcyB0aGUgY2FjaGVhYmlsaXR5IHRlc3Q6IGEgdmFsdWUgbG9hZGVkIGZvciBzb21lIG90aGVyXG4gKiBkaXJlY3RvcnkgaXMgY29ycmVjdCBidXQgbm90IHNoYXJlYWJsZSwgc28gaXQgaXMgbmV2ZXIgc3RvcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZXh0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbnRleHQgPSB0b0NvbnRleHQodmFsdWUpO1xuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGdldENvbnRleHRzKCkpIHtcbiAgICBpZiAoY2FuZGlkYXRlID09PSBjb250ZXh0KSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZWAgdGhyb3VnaCBgbG9hZGVyYCwgcmV1c2luZyB0aGUgY2FjaGVkIHZhbHVlIHdoaWxlIHRoZSBjb250ZXh0IGlzXG4gKiB1bmNoYW5nZWQuXG4gKlxuICogYGNvbnRleHRgIHNlbGVjdHMgd2hhdCB0aGUgdmFsdWUgaXMgbG9hZGVkIEZPUjogb21pdHRlZCwgYG51bGxgLCBvciBgXCIuXCJgIG1lYW5cbiAqIHRoZSBjdXJyZW50IGNvbnRleHQuIEl0IGlzIHBhc3NlZCBzdHJhaWdodCB0byBgbG9hZGVyYCwgc28gYSBsb2FkZXIgbmV2ZXIgaGFzXG4gKiB0byByZWFjaCBmb3IgYHByb2Nlc3MuY3dkKClgIGl0c2VsZi5cbiAqXG4gKiBDYWNoaW5nIGhhcHBlbnMgb25seSB3aGVuIHRoZSByZXNvbHZlZCBjb250ZXh0IGlzIG9uZSB0aGlzIHJ1bnRpbWUgaXMgaW5cbiAqICh7QGxpbmsgaXNDb250ZXh0fSksIHNvIGBjYWNoZWQobmFtZSwgbG9hZGVyLCBcIi9zb21ld2hlcmUvZWxzZVwiKWAgYWx3YXlzIGNhbGxzXG4gKiBgbG9hZGVyYCBhbmQgc3RvcmVzIG5vdGhpbmcuIEEgc3RvcmVkIGVudHJ5IHJlbWVtYmVycyBpdHMgY29udGV4dCBhbmQgaXNcbiAqIGRpc2NhcmRlZCBvbiB0aGUgbmV4dCBjYWxsIG9uY2UgdGhhdCBjb250ZXh0IGNoYW5nZXMuIEEgdGhyb3duIGVycm9yIGlzIG5ldmVyXG4gKiBjYWNoZWQ7IGEgcmVqZWN0ZWQgcHJvbWlzZSBldmljdHMgaXRzIGVudHJ5IHNvIGEgbGF0ZXIgY2FsbCByZXRyaWVzLlxuICpcbiAqIGBuYW1lYCBpZGVudGlmaWVzIHRoZSBzbG90IGFuZCBtdXN0IGJlIHN0YWJsZSBhY3Jvc3MgY2FsbHMgLSBwYXNzIGFcbiAqIG1vZHVsZS1xdWFsaWZpZWQgbGlzdCBvZiBzdHJpbmcgcGFydHMgKGBbXCJwcm9qZWN0XCIsIGNvbW1hbmQsIC4uLmFyZ3NdYCkgc28gdHdvXG4gKiBtb2R1bGVzIGNhbm5vdCBjb2xsaWRlIG9uIG9uZSBzbG90LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVkPFQ+KFxuICBuYW1lOiBPbmVPck1hbnk8c3RyaW5nPixcbiAgbG9hZGVyOiBDb250ZXh0TG9hZGVyPFQ+LFxuICBjb250ZXh0Pzogc3RyaW5nIHwgbnVsbCxcbik6IFQge1xuICBjb25zdCByZXNvbHZlZCA9IHRvQ29udGV4dChjb250ZXh0KSA/PyBnZXRDb250ZXh0KCk7XG4gIGNvbnN0IGtleSA9IHJlc29sdmVkICE9PSB1bmRlZmluZWQgJiYgaXNDb250ZXh0KHJlc29sdmVkKSA/IGNhY2hlS2V5KG5hbWUpIDogdW5kZWZpbmVkO1xuICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlbnRyeSA9IENBQ0hFLmdldChrZXkpO1xuICAgIGlmIChlbnRyeSAmJiBlbnRyeS5jb250ZXh0ID09PSByZXNvbHZlZCkgcmV0dXJuIGVudHJ5LnZhbHVlIGFzIFQ7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBsb2FkZXIocmVzb2x2ZWQpO1xuICBpZiAoa2V5ICE9PSB1bmRlZmluZWQgJiYgcmVzb2x2ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGVudHJ5OiBDYWNoZUVudHJ5ID0geyBjb250ZXh0OiByZXNvbHZlZCwgdmFsdWUgfTtcbiAgICBDQUNIRS5zZXQoa2V5LCBlbnRyeSk7XG4gICAgaWYgKGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICB2b2lkIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBpZiAoQ0FDSEUuZ2V0KGtleSkgPT09IGVudHJ5KSBDQUNIRS5kZWxldGUoa2V5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKiBEcm9wIG9uZSBjYWNoZWQgc2xvdCwgb3IgdGhlIHdob2xlIGNhY2hlIHdoZW4gYG5hbWVgIGlzIG9taXR0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIobmFtZT86IE9uZU9yTWFueTxzdHJpbmc+KTogdm9pZCB7XG4gIGlmIChuYW1lID09PSB1bmRlZmluZWQpIENBQ0hFLmNsZWFyKCk7XG4gIGVsc2UgQ0FDSEUuZGVsZXRlKGNhY2hlS2V5KG5hbWUpKTtcbn1cblxuLyoqXG4gKiBDYW5vbmljYWwgc2xvdCBrZXkuIGBKU09OLnN0cmluZ2lmeWAgb3ZlciB0aGUgcGFydHMgcmF0aGVyIHRoYW4gYSBoYXNoOiB0aGVcbiAqIHBhcnRzIGFyZSBhbHJlYWR5IHN0cmluZ3MsIGFuZCBhbiBleGFjdCBrZXkgY2Fubm90IGNvbGxpZGUgdHdvIHVucmVsYXRlZFxuICogbG9va3VwcyBvbnRvIG9uZSBzbG90IHRoZSB3YXkgYSB0cnVuY2F0ZWQgZGlnZXN0IGNhbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVLZXkobmFtZTogT25lT3JNYW55PHN0cmluZz4pOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgPyBbbmFtZV0gOiBuYW1lKTtcbn1cblxuLyoqXG4gKiBFdmVyeSBjb250ZXh0IHRoaXMgcnVudGltZSByZXBvcnRzLCBpbiBwcmVjZWRlbmNlIG9yZGVyLiBBIHNlcnZlciB5aWVsZHMgaXRzXG4gKiBgY3dkYDsgYSBicm93c2VyIHlpZWxkcyBgbG9jYXRpb24ub3JpZ2luYC4gQSBoeWJyaWQgKGEgd29ya2VyIHdpdGggYm90aCkgeWllbGRzXG4gKiBib3RoLCB3aGljaCBpcyB3aGF0IG1ha2VzIHtAbGluayBpc0NvbnRleHR9IGFjY2VwdCBlaXRoZXIuXG4gKi9cbmZ1bmN0aW9uKiBnZXRDb250ZXh0cygpOiBHZW5lcmF0b3I8c3RyaW5nLCB2b2lkLCB2b2lkPiB7XG4gIGNvbnN0IGdsb2JhbCA9IGdsb2JhbFRoaXMgYXMge1xuICAgIHByb2Nlc3M/OiB7IGN3ZD86ICgpID0+IHN0cmluZyB9O1xuICAgIGxvY2F0aW9uPzogeyBvcmlnaW4/OiBzdHJpbmcgfTtcbiAgfTtcbiAgY29uc3QgY3dkID0gZ2xvYmFsLnByb2Nlc3M/LmN3ZDtcbiAgaWYgKHR5cGVvZiBjd2QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCBjdXJyZW50OiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICBjdXJyZW50ID0gY3dkKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0gdG9Db250ZXh0KGN1cnJlbnQpO1xuICAgIGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQpIHlpZWxkIGNvbnRleHQ7XG4gIH1cbiAgY29uc3Qgb3JpZ2luID0gdG9Db250ZXh0KGdsb2JhbC5sb2NhdGlvbj8ub3JpZ2luKTtcbiAgaWYgKG9yaWdpbiAhPT0gdW5kZWZpbmVkKSB5aWVsZCBvcmlnaW47XG59XG5cbi8qKiBBIG5vbi1ibGFuayBzdHJpbmcsIHdpdGggYFwiLlwiYCB0cmVhdGVkIGFzIFwidGhlIGN1cnJlbnQgY29udGV4dFwiICh1bnJlc29sdmVkKS4gKi9cbmZ1bmN0aW9uIHRvQ29udGV4dCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gIHJldHVybiB0cmltbWVkICYmIHRyaW1tZWQgIT09IFwiLlwiID8gdHJpbW1lZCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIER1Y2stdHlwZSBhbnkgdmFsdWUgd2l0aCBhIGNhbGxhYmxlIGAudGhlbmAgYXMgYSB0aGVuYWJsZS4gKi9cbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQcm9taXNlTGlrZTx1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgIFwidGhlblwiIGluIHZhbHVlICYmXG4gICAgICB0eXBlb2YgKHZhbHVlIGFzIFByb21pc2VMaWtlPHVua25vd24+KS50aGVuID09PSBcImZ1bmN0aW9uXCIpXG4gICk7XG59XG4iXX0=
package/src/context.ts DELETED
@@ -1,164 +0,0 @@
1
- /**
2
- * The ambient CONTEXT a cached value belongs to, and a cache keyed by it.
3
- *
4
- * Most of the expensive lookups in this repo are pure functions of the directory
5
- * (or the page) they were asked from: `npm prefix`, `git rev-parse`, a `.env`
6
- * file, `databricks bundle validate`. Memoizing them with
7
- * {@link functionModule.memoize} is wrong in exactly one situation, and it is the
8
- * situation a CLI hits: the process changes directory, and the cached answer now
9
- * describes somewhere else. Every caller therefore grew the same guard - resolve
10
- * `cwd`, compare it against `process.cwd()`, and skip the cache when they differ
11
- * (see the `cacheEnabled` dance this module replaced in node-core's `project`).
12
- *
13
- * This is that guard, once. A cache slot stores the context it was loaded under,
14
- * so a context change (a moved `cwd`, a different origin) MISSES rather than
15
- * returns a stale value, and a lookup for some OTHER directory is not cached at
16
- * all - one off-context call must not evict or poison the hot path.
17
- *
18
- * The context is the process working directory on a server and
19
- * `location.origin` in a browser, whichever this runtime has. Browser-safe:
20
- * `process` and `location` are reached through `globalThis` and guarded, so this
21
- * module needs no Node types and simply has no context off-process.
22
- *
23
- * @example
24
- * const roots = context.cached(["project", "npm", "prefix"], (cwd) =>
25
- * spawnSync("npm", ["prefix"], { cwd }),
26
- * );
27
- *
28
- * @module
29
- */
30
-
31
- import type { OneOrMany } from "./object.ts";
32
-
33
- /** A loader for a cached value; receives the resolved context. */
34
- export type ContextLoader<T> = (context: string | undefined) => T;
35
-
36
- interface CacheEntry {
37
- context: string;
38
- value: unknown;
39
- }
40
-
41
- const CACHE = new Map<string, CacheEntry>();
42
-
43
- /**
44
- * The current context: the process working directory, else `location.origin`,
45
- * else `undefined` (a runtime with neither, where nothing is cacheable).
46
- */
47
- export function getContext(): string | undefined {
48
- for (const context of getContexts()) return context;
49
- return undefined;
50
- }
51
-
52
- /**
53
- * Whether `value` names a context this runtime is CURRENTLY in - the live `cwd`
54
- * or origin. This is the cacheability test: a value loaded for some other
55
- * directory is correct but not shareable, so it is never stored.
56
- */
57
- export function isContext(value: unknown): boolean {
58
- const context = toContext(value);
59
- if (context === undefined) return false;
60
- for (const candidate of getContexts()) {
61
- if (candidate === context) return true;
62
- }
63
- return false;
64
- }
65
-
66
- /**
67
- * Load `name` through `loader`, reusing the cached value while the context is
68
- * unchanged.
69
- *
70
- * `context` selects what the value is loaded FOR: omitted, `null`, or `"."` mean
71
- * the current context. It is passed straight to `loader`, so a loader never has
72
- * to reach for `process.cwd()` itself.
73
- *
74
- * Caching happens only when the resolved context is one this runtime is in
75
- * ({@link isContext}), so `cached(name, loader, "/somewhere/else")` always calls
76
- * `loader` and stores nothing. A stored entry remembers its context and is
77
- * discarded on the next call once that context changes. A thrown error is never
78
- * cached; a rejected promise evicts its entry so a later call retries.
79
- *
80
- * `name` identifies the slot and must be stable across calls - pass a
81
- * module-qualified list of string parts (`["project", command, ...args]`) so two
82
- * modules cannot collide on one slot.
83
- */
84
- export function cached<T>(
85
- name: OneOrMany<string>,
86
- loader: ContextLoader<T>,
87
- context?: string | null,
88
- ): T {
89
- const resolved = toContext(context) ?? getContext();
90
- const key = resolved !== undefined && isContext(resolved) ? cacheKey(name) : undefined;
91
- if (key !== undefined) {
92
- const entry = CACHE.get(key);
93
- if (entry && entry.context === resolved) return entry.value as T;
94
- }
95
- const value = loader(resolved);
96
- if (key !== undefined && resolved !== undefined) {
97
- const entry: CacheEntry = { context: resolved, value };
98
- CACHE.set(key, entry);
99
- if (isThenable(value)) {
100
- void Promise.resolve(value).catch(() => {
101
- if (CACHE.get(key) === entry) CACHE.delete(key);
102
- });
103
- }
104
- }
105
- return value;
106
- }
107
-
108
- /** Drop one cached slot, or the whole cache when `name` is omitted. */
109
- export function clear(name?: OneOrMany<string>): void {
110
- if (name === undefined) CACHE.clear();
111
- else CACHE.delete(cacheKey(name));
112
- }
113
-
114
- /**
115
- * Canonical slot key. `JSON.stringify` over the parts rather than a hash: the
116
- * parts are already strings, and an exact key cannot collide two unrelated
117
- * lookups onto one slot the way a truncated digest can.
118
- */
119
- function cacheKey(name: OneOrMany<string>): string {
120
- return JSON.stringify(typeof name === "string" ? [name] : name);
121
- }
122
-
123
- /**
124
- * Every context this runtime reports, in precedence order. A server yields its
125
- * `cwd`; a browser yields `location.origin`. A hybrid (a worker with both) yields
126
- * both, which is what makes {@link isContext} accept either.
127
- */
128
- function* getContexts(): Generator<string, void, void> {
129
- const global = globalThis as {
130
- process?: { cwd?: () => string };
131
- location?: { origin?: string };
132
- };
133
- const cwd = global.process?.cwd;
134
- if (typeof cwd === "function") {
135
- let current: unknown;
136
- try {
137
- current = cwd();
138
- } catch {
139
- current = undefined;
140
- }
141
- const context = toContext(current);
142
- if (context !== undefined) yield context;
143
- }
144
- const origin = toContext(global.location?.origin);
145
- if (origin !== undefined) yield origin;
146
- }
147
-
148
- /** A non-blank string, with `"."` treated as "the current context" (unresolved). */
149
- function toContext(value: unknown): string | undefined {
150
- if (typeof value !== "string") return undefined;
151
- const trimmed = value.trim();
152
- return trimmed && trimmed !== "." ? trimmed : undefined;
153
- }
154
-
155
- /** Duck-type any value with a callable `.then` as a thenable. */
156
- function isThenable(value: unknown): value is PromiseLike<unknown> {
157
- return (
158
- value instanceof Promise ||
159
- (typeof value === "object" &&
160
- value !== null &&
161
- "then" in value &&
162
- typeof (value as PromiseLike<unknown>).then === "function")
163
- );
164
- }