summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:35:37 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:35:37 +0000
commita90a5cba08fdf6c0ceb95101c275108a152a3aed (patch)
tree532507288f3defd7f4dcf1af49698bcb76034855 /tools
parentAdding debian version 126.0.1-1. (diff)
downloadfirefox-a90a5cba08fdf6c0ceb95101c275108a152a3aed.tar.xz
firefox-a90a5cba08fdf6c0ceb95101c275108a152a3aed.zip
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/@types/lib.gecko.dom.d.ts9
-rw-r--r--tools/@types/lib.gecko.xpcom.d.ts265
-rw-r--r--tools/browsertime/mach_commands.py2
-rw-r--r--tools/esmify/import-to-import_esmodule.js472
-rw-r--r--tools/esmify/is-esmified.js81
-rw-r--r--tools/esmify/mach_commands.py908
-rw-r--r--tools/esmify/map.json1127
-rw-r--r--tools/esmify/package-lock.json7895
-rw-r--r--tools/esmify/package.json9
-rw-r--r--tools/esmify/static-import.js147
-rw-r--r--tools/esmify/use-import-export-declarations.js208
-rw-r--r--tools/esmify/utils.js165
-rw-r--r--tools/fuzzing/interface/FuzzingInterface.cpp39
-rw-r--r--tools/fuzzing/interface/FuzzingInterface.h48
-rw-r--r--tools/fuzzing/interface/FuzzingInterfaceStream.cpp54
-rw-r--r--tools/fuzzing/interface/FuzzingInterfaceStream.h41
-rw-r--r--tools/fuzzing/interface/harness/FuzzerTestHarness.h1
-rw-r--r--tools/fuzzing/interface/moz.build4
-rw-r--r--tools/fuzzing/ipc/IPCFuzzController.cpp240
-rw-r--r--tools/fuzzing/ipc/IPCFuzzController.h13
-rw-r--r--tools/fuzzing/smoke/smoke.py2
-rwxr-xr-xtools/github-sync/converter.py481
-rwxr-xr-xtools/github-sync/read-json.py42
-rw-r--r--tools/github-sync/readme.md106
-rwxr-xr-xtools/github-sync/sync-to-github.sh159
-rw-r--r--tools/lint/condprof-addons.yml2
-rw-r--r--tools/lint/condprof-addons/__init__.py2
-rw-r--r--tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js2
-rw-r--r--tools/lint/eslint/eslint-plugin-mozilla/lib/environments/privileged.js1
-rw-r--r--tools/lint/eslint/eslint-plugin-mozilla/lib/environments/special-powers-sandbox.js1
-rw-r--r--tools/lint/license.yml53
-rw-r--r--tools/lint/perfdocs.yml2
-rw-r--r--tools/lint/perfdocs/framework_gatherers.py135
-rw-r--r--tools/lint/perfdocs/gatherer.py5
-rw-r--r--tools/lint/perfdocs/generator.py66
-rw-r--r--tools/lint/perfdocs/verifier.py136
-rw-r--r--tools/lint/python/l10n_lint.py19
-rw-r--r--tools/lint/rejected-words.yml2
-rw-r--r--tools/lint/test/conftest.py8
-rw-r--r--tools/lint/test/test_perfdocs.py59
-rw-r--r--tools/lint/test/test_perfdocs_generation.py68
-rw-r--r--tools/lint/trojan-source.yml2
-rw-r--r--tools/moz.build3
-rw-r--r--tools/moztreedocs/docs/jsdoc-support.rst23
-rw-r--r--tools/performance/Perfetto.cpp19
-rw-r--r--tools/performance/Perfetto.h117
-rw-r--r--tools/performance/moz.build5
-rw-r--r--tools/profiler/core/memory_hooks.cpp7
-rw-r--r--tools/profiler/core/memory_hooks.h1
-rw-r--r--tools/profiler/core/platform.cpp320
-rw-r--r--tools/profiler/docs/code-overview.rst2
-rw-r--r--tools/profiler/docs/index.rst2
-rw-r--r--tools/profiler/docs/instrumenting-android.rst102
-rw-r--r--tools/profiler/docs/instrumenting-javascript.rst5
-rw-r--r--tools/profiler/docs/instrumenting-rust.rst5
-rw-r--r--tools/profiler/docs/markers-guide.rst5
-rw-r--r--tools/profiler/public/ProfilerControl.h3
-rw-r--r--tools/profiler/public/ProfilerCounts.h30
-rw-r--r--tools/profiler/public/ProfilerState.h11
-rw-r--r--tools/profiler/tests/gtest/moz.build3
-rw-r--r--tools/profiler/tests/xpcshell/test_feature_posix_signals.js85
-rw-r--r--tools/profiler/tests/xpcshell/xpcshell.toml6
-rw-r--r--tools/rewriting/Generated.txt46
-rw-r--r--tools/rewriting/ThirdPartyPaths.txt5
-rw-r--r--tools/signing/macos/mach_commands.py2
-rw-r--r--tools/tryselect/selectors/perf.py2
-rw-r--r--tools/tryselect/selectors/release.py2
-rw-r--r--tools/tryselect/task_config.py2
-rw-r--r--tools/tryselect/tasks.py2
-rw-r--r--tools/ts/fixtures/intrinsics.d.ts101
-rw-r--r--tools/ts/fixtures/xpctest.d.ts109
71 files changed, 1551 insertions, 12555 deletions
diff --git a/tools/@types/lib.gecko.dom.d.ts b/tools/@types/lib.gecko.dom.d.ts
index 656ffabf90..bb1e110104 100644
--- a/tools/@types/lib.gecko.dom.d.ts
+++ b/tools/@types/lib.gecko.dom.d.ts
@@ -9491,6 +9491,10 @@ interface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GeometryU
*
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createElement)
*/
+ createElement<K extends keyof HTMLElementTagNameMap>(tagName: K, options?: ElementCreationOptions): HTMLElementTagNameMap[K];
+ /** @deprecated */
+ createElement<K extends keyof HTMLElementDeprecatedTagNameMap>(tagName: K, options?: ElementCreationOptions): HTMLElementDeprecatedTagNameMap[K];
+ createElement(tagName: string, options?: ElementCreationOptions): HTMLElement;
/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createElementNS) */
createElementNS(namespace: string | null, qualifiedName: string, options?: ElementCreationOptions | string): Element;
/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createEvent) */
@@ -17898,11 +17902,10 @@ interface IDBFactory {
/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBFactory/cmp) */
cmp(first: any, second: any): number;
/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBFactory/deleteDatabase) */
- deleteDatabase(name: string, options?: IDBOpenDBOptions): IDBOpenDBRequest;
+ deleteDatabase(name: string): IDBOpenDBRequest;
deleteForPrincipal(principal: Principal, name: string, options?: IDBOpenDBOptions): IDBOpenDBRequest;
/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBFactory/open) */
- open(name: string, version: number): IDBOpenDBRequest;
- open(name: string, options?: IDBOpenDBOptions): IDBOpenDBRequest;
+ open(name: string, version?: number): IDBOpenDBRequest;
openForPrincipal(principal: Principal, name: string, version: number): IDBOpenDBRequest;
openForPrincipal(principal: Principal, name: string, options?: IDBOpenDBOptions): IDBOpenDBRequest;
}
diff --git a/tools/@types/lib.gecko.xpcom.d.ts b/tools/@types/lib.gecko.xpcom.d.ts
index ba4d17fef6..891093525a 100644
--- a/tools/@types/lib.gecko.xpcom.d.ts
+++ b/tools/@types/lib.gecko.xpcom.d.ts
@@ -444,6 +444,7 @@ interface nsIAccessibleRole extends nsISupports {
readonly ROLE_STRONG: 136;
readonly ROLE_TIME: 137;
readonly ROLE_GRID: 138;
+ readonly ROLE_ROWGROUP: 139;
}
// https://searchfox.org/mozilla-central/source/accessible/interfaces/nsIAccessibleScrollingEvent.idl
@@ -1041,14 +1042,6 @@ interface nsIAutoCompleteObserver extends nsISupports {
onSearchResult(search: nsIAutoCompleteSearch, result: nsIAutoCompleteResult): void;
}
-interface nsIAutoCompleteSearchDescriptor extends nsISupports {
- readonly SEARCH_TYPE_DELAYED: 0;
- readonly SEARCH_TYPE_IMMEDIATE: 1;
-
- readonly searchType: u16;
- readonly clearingAutoFillSearchesAgain: boolean;
-}
-
// https://searchfox.org/mozilla-central/source/toolkit/components/autocomplete/nsIAutoCompleteSimpleResult.idl
interface nsIAutoCompleteSimpleResult extends nsIAutoCompleteResult {
@@ -1422,6 +1415,12 @@ interface nsIToolkitChromeRegistry extends nsIXULChromeRegistry {
getLocalesForPackage(aPackage: string): nsIUTF8StringEnumerator;
}
+// https://searchfox.org/mozilla-central/source/tools/code-coverage/nsICodeCoverage.idl
+
+interface nsICodeCoverage extends nsISupports {
+ flushCounters(): Promise<any>;
+}
+
// https://searchfox.org/mozilla-central/source/dom/commandhandler/nsICommandManager.idl
interface nsICommandManager extends nsISupports {
@@ -1651,17 +1650,11 @@ enum LoadCommand {
LOAD_CMD_PUSHSTATE = 8,
}
-enum MetaViewportOverride {
- META_VIEWPORT_OVERRIDE_DISABLED = 0,
- META_VIEWPORT_OVERRIDE_ENABLED = 1,
- META_VIEWPORT_OVERRIDE_NONE = 2,
-}
-
}
declare global {
-interface nsIDocShell extends nsIDocShellTreeItem, Enums<typeof nsIDocShell.DocShellEnumeratorDirection & typeof nsIDocShell.AppType & typeof nsIDocShell.BusyFlags & typeof nsIDocShell.LoadCommand & typeof nsIDocShell.MetaViewportOverride> {
+interface nsIDocShell extends nsIDocShellTreeItem, Enums<typeof nsIDocShell.DocShellEnumeratorDirection & typeof nsIDocShell.AppType & typeof nsIDocShell.BusyFlags & typeof nsIDocShell.LoadCommand> {
setCancelContentJSEpoch(aEpoch: i32): void;
addState(aData: any, aTitle: string, aURL: string, aReplace: boolean): void;
prepareForNewContentModel(): void;
@@ -1733,7 +1726,6 @@ interface nsIDocShell extends nsIDocShellTreeItem, Enums<typeof nsIDocShell.DocS
setOriginAttributes(aAttrs: any): void;
readonly editingSession: nsIEditingSession;
readonly browserChild: nsIBrowserChild;
- metaViewportOverride: nsIDocShell.MetaViewportOverride;
useTrackingProtection: boolean;
setColorMatrix(aMatrix: float[]): void;
readonly isForceReloading: boolean;
@@ -2186,6 +2178,7 @@ declare global {
interface nsIScriptableContentIterator extends nsISupports, Enums<typeof nsIScriptableContentIterator.IteratorType> {
initWithRootNode(aType: nsIScriptableContentIterator.IteratorType, aRoot: Node): void;
initWithRange(aType: nsIScriptableContentIterator.IteratorType, aRange: Range): void;
+ initWithRangeAllowCrossShadowBoundary(aType: nsIScriptableContentIterator.IteratorType, aRange: Range): void;
initWithPositions(aType: nsIScriptableContentIterator.IteratorType, aStartContainer: Node, aStartOffset: u32, aEndContainer: Node, aEndOffset: u32): void;
first(): void;
last(): void;
@@ -2210,8 +2203,9 @@ interface nsISelectionController extends nsISelectionDisplay {
readonly SELECTION_FIND: 8;
readonly SELECTION_URLSECONDARY: 9;
readonly SELECTION_URLSTRIKEOUT: 10;
- readonly SELECTION_HIGHLIGHT: 11;
- readonly NUM_SELECTIONTYPES: 12;
+ readonly SELECTION_TARGET_TEXT: 11;
+ readonly SELECTION_HIGHLIGHT: 12;
+ readonly NUM_SELECTIONTYPES: 13;
readonly SELECTION_ANCHOR_REGION: 0;
readonly SELECTION_FOCUS_REGION: 1;
readonly SELECTION_WHOLE_SELECTION: 2;
@@ -4006,15 +4000,13 @@ interface nsIWebAuthnAutoFillEntry extends nsISupports {
interface nsIWebAuthnService extends nsISupports {
readonly isUVPAA: boolean;
- makeCredential(aTransactionId: u64, browsingContextId: u64, args: nsIWebAuthnRegisterArgs, promise: nsIWebAuthnRegisterPromise): void;
- getAssertion(aTransactionId: u64, browsingContextId: u64, args: nsIWebAuthnSignArgs, promise: nsIWebAuthnSignPromise): void;
cancel(aTransactionId: u64): void;
hasPendingConditionalGet(aBrowsingContextId: u64, aOrigin: string): u64;
getAutoFillEntries(aTransactionId: u64): nsIWebAuthnAutoFillEntry[];
selectAutoFillEntry(aTransactionId: u64, aCredentialId: u8[]): void;
resumeConditionalGet(aTransactionId: u64): void;
pinCallback(aTransactionId: u64, aPin: string): void;
- resumeMakeCredential(aTransactionId: u64, aForceNoneAttestation: boolean): void;
+ setHasAttestationConsent(aTransactionId: u64, aHasConsent: boolean): void;
selectionCallback(aTransactionId: u64, aIndex: u64): void;
addVirtualAuthenticator(protocol: string, transport: string, hasResidentKey: boolean, hasUserVerification: boolean, isUserConsenting: boolean, isUserVerified: boolean): u64;
removeVirtualAuthenticator(authenticatorId: u64): void;
@@ -4650,7 +4642,7 @@ interface nsITypeAheadFind extends nsISupports {
// https://searchfox.org/mozilla-central/source/toolkit/components/glean/xpcom/nsIFOG.idl
interface nsIFOG extends nsISupports {
- initializeFOG(aDataPathOverride?: string, aAppIdOverride?: string): void;
+ initializeFOG(aDataPathOverride?: string, aAppIdOverride?: string, aDisableInternalPings?: boolean): void;
registerCustomPings(): void;
setLogPings(aEnableLogPings: boolean): void;
setTagPings(aDebugTag: string): void;
@@ -5304,7 +5296,7 @@ interface mozIOSPreferences extends nsISupports {
// https://searchfox.org/mozilla-central/source/toolkit/components/passwordmgr/nsILoginAutoCompleteSearch.idl
interface nsILoginAutoCompleteSearch extends nsISupports {
- startSearch(aSearchString: string, aPreviousResult: nsIAutoCompleteResult, aElement: HTMLInputElement, aListener: nsIFormAutoCompleteObserver): void;
+ startSearch(aSearchString: string, aPreviousResult: nsIAutoCompleteResult, aElement: HTMLInputElement, aListener: nsIFormFillCompleteObserver): void;
stopSearch(): void;
}
@@ -5439,6 +5431,7 @@ interface nsIHandlerInfo extends nsISupports {
readonly possibleApplicationHandlers: nsIMutableArray;
readonly hasDefaultHandler: boolean;
readonly defaultDescription: string;
+ readonly defaultExecutable: nsIFile;
launchWithURI(aURI: nsIURI, aBrowsingContext?: BrowsingContext): void;
preferredAction: nsHandlerInfoAction;
alwaysAskBeforeHandling: boolean;
@@ -5467,6 +5460,7 @@ interface nsIHandlerApp extends nsISupports {
interface nsILocalHandlerApp extends nsIHandlerApp {
executable: nsIFile;
readonly parameterCount: u32;
+ prettyNameAsync(): Promise<any>;
clearParameters(): void;
appendParameter(param: string): void;
getParameter(parameterIndex: u32): string;
@@ -6565,12 +6559,6 @@ interface nsIParentChannel extends nsIStreamListener {
// https://searchfox.org/mozilla-central/source/netwerk/base/nsIParentRedirectingChannel.idl
-interface nsIParentRedirectingChannel extends nsIParentChannel {
- startRedirect(newChannel: nsIChannel, redirectFlags: u32, callback: nsIAsyncVerifyRedirectCallback): void;
- continueVerification(callback: nsIAsyncVerifyRedirectReadyCallback): void;
- completeRedirect(succeeded: nsresult): void;
-}
-
// https://searchfox.org/mozilla-central/source/netwerk/base/nsIPermission.idl
interface nsIPermission extends nsISupports {
@@ -6601,6 +6589,7 @@ interface nsIPermissionManager extends nsISupports {
getAllByTypes(types: string[]): nsIPermission[];
getAllByTypeSince(type: string, since: i64): nsIPermission[];
addFromPrincipal(principal: nsIPrincipal, type: string, permission: u32, expireType?: u32, expireTime?: i64): void;
+ testAddFromPrincipalByTime(principal: nsIPrincipal, type: string, permission: u32, modificationTime: i64): void;
addFromPrincipalAndPersistInPrivateBrowsing(principal: nsIPrincipal, type: string, permission: u32): void;
removeFromPrincipal(principal: nsIPrincipal, type: string): void;
removePermission(perm: nsIPermission): void;
@@ -7090,7 +7079,6 @@ interface nsIStreamLoader extends nsIThreadRetargetableStreamListener {
interface nsIStreamTransportService extends nsISupports {
createInputTransport(aStream: nsIInputStream, aCloseWhenDone: boolean): nsITransport;
- InputAvailable(aStream: nsIInputStream, aCallback: nsIInputAvailableCallback): void;
}
// https://searchfox.org/mozilla-central/source/netwerk/base/nsISyncStreamListener.idl
@@ -7239,7 +7227,6 @@ interface nsIUDPSocket extends nsISupports {
init2(aAddr: string, aPort: i32, aPrincipal: nsIPrincipal, aAddressReuse?: boolean): void;
close(): void;
asyncListen(aListener: nsIUDPSocketListener): void;
- syncListen(aListener: nsIUDPSocketSyncListener): void;
readonly localAddr: nsINetAddr;
readonly port: i32;
send(host: string, port: u16, data: u8[]): u32;
@@ -8344,6 +8331,7 @@ interface nsIDirIndexParser extends nsIStreamListener {
interface nsIStreamConverter extends nsIThreadRetargetableStreamListener {
convert(aFromStream: nsIInputStream, aFromType: string, aToType: string, aCtxt: nsISupports): nsIInputStream;
asyncConvertData(aFromType: string, aToType: string, aListener: nsIStreamListener, aCtxt: nsISupports): void;
+ maybeRetarget(request: nsIRequest): void;
getConvertedType(aFromType: string, aChannel: nsIChannel): string;
}
@@ -8738,9 +8726,7 @@ interface nsICertStorage extends nsISupports {
setRevocations(revocations: nsIRevocationState[], callback: nsICertStorageCallback): void;
getRevocationState(issuer: u8[], serial: u8[], subject: u8[], pubkey: u8[]): i16;
setFullCRLiteFilter(filter: u8[], enrolledIssuers: string[], coverage: nsICRLiteCoverage[], callback: nsICertStorageCallback): void;
- getCRLiteRevocationState(issuer: u8[], issuerSPKI: u8[], serialNumber: u8[], timestamps: nsICRLiteTimestamp[]): i16;
addCRLiteStash(stash: u8[], callback: nsICertStorageCallback): void;
- isCertRevokedByStash(issuerSPKI: u8[], serialNumber: u8[]): boolean;
addCerts(certs: nsICertInfo[], callback: nsICertStorageCallback): void;
removeCertsByHashes(hashes: string[], callback: nsICertStorageCallback): void;
findCertsBySubject(subject: u8[]): u8[][];
@@ -9597,7 +9583,7 @@ interface nsINavHistoryQueryOptions extends nsISupports {
}
interface nsINavHistoryService extends nsISupports {
- readonly DATABASE_SCHEMA_VERSION: 76;
+ readonly DATABASE_SCHEMA_VERSION: 77;
readonly TRANSITION_LINK: 1;
readonly TRANSITION_TYPED: 2;
readonly TRANSITION_BOOKMARK: 3;
@@ -9707,6 +9693,7 @@ interface nsIPrefObserver extends nsISupports {
interface nsIPrefService extends nsISupports {
resetPrefs(): void;
savePrefFile(aFile: nsIFile): void;
+ backupPrefFile(aFile: nsIFile): Promise<any>;
getBranch(aPrefRoot: string): nsIPrefBranch;
getDefaultBranch(aPrefRoot: string): nsIPrefBranch;
readonly dirty: boolean;
@@ -9827,17 +9814,6 @@ interface mozISandboxSettings extends nsISupports {
readonly contentWin32kLockdownStateString: string;
}
-// https://searchfox.org/mozilla-central/source/toolkit/components/satchel/nsIFormAutoComplete.idl
-
-interface nsIFormAutoComplete extends nsISupports {
- autoCompleteSearchAsync(aInputName: string, aSearchString: string, aField: HTMLInputElement, aPreviousResult: nsIAutoCompleteResult, aAddDatalist: boolean, aListener: nsIFormAutoCompleteObserver): void;
- stopAutoCompleteSearch(): void;
-}
-
-type nsIFormAutoCompleteObserver = Callable<{
- onSearchCompletion(result: nsIAutoCompleteResult): void;
-}>
-
// https://searchfox.org/mozilla-central/source/toolkit/components/satchel/nsIFormFillController.idl
interface nsIFormFillController extends nsISupports {
@@ -9851,6 +9827,17 @@ interface nsIFormFillController extends nsISupports {
showPopup(): void;
}
+type nsIFormFillCompleteObserver = Callable<{
+ onSearchCompletion(result: nsIAutoCompleteResult): void;
+}>
+
+// https://searchfox.org/mozilla-central/source/toolkit/components/satchel/nsIFormHistoryAutoComplete.idl
+
+interface nsIFormHistoryAutoComplete extends nsISupports {
+ autoCompleteSearchAsync(aInputName: string, aSearchString: string, aField: HTMLInputElement, aPreviousResult: nsIAutoCompleteResult, aAddDatalist: boolean, aListener: nsIFormFillCompleteObserver): void;
+ stopAutoCompleteSearch(): void;
+}
+
// https://searchfox.org/mozilla-central/source/services/interfaces/mozIAppServicesLogger.idl
interface mozIAppServicesLogger extends nsISupports {
@@ -10112,7 +10099,7 @@ interface mozIStorageAsyncConnection extends nsISupports {
readonly TRANSACTION_EXCLUSIVE: 2;
defaultTransactionType: i32;
- readonly variableLimit: i32;
+ variableLimit: i32;
readonly transactionInProgress: boolean;
asyncClose(aCallback?: mozIStorageCompletionCallback): void;
asyncClone(aReadOnly: boolean, aCallback: mozIStorageCompletionCallback): void;
@@ -10785,10 +10772,12 @@ interface nsIClearDataService extends nsISupports {
readonly CLEAR_COOKIE_BANNER_EXECUTED_RECORD: 67108864;
readonly CLEAR_FINGERPRINTING_PROTECTION_STATE: 134217728;
readonly CLEAR_BOUNCE_TRACKING_PROTECTION_STATE: 268435456;
+ readonly CLEAR_STORAGE_PERMISSIONS: 536870912;
readonly CLEAR_ALL: 4294967295;
readonly CLEAR_ALL_CACHES: 12648454;
readonly CLEAR_DOM_STORAGES: 262784;
readonly CLEAR_FORGET_ABOUT_SITE: 534237079;
+ readonly CLEAR_COOKIES_AND_SITE_DATA: 1007104641;
deleteDataFromLocalFiles(aIsUserRequest: boolean, aFlags: u32, aCallback: nsIClearDataCallback): void;
deleteDataFromHost(aHost: string, aIsUserRequest: boolean, aFlags: u32, aCallback: nsIClearDataCallback): void;
@@ -10847,13 +10836,21 @@ enum Action {
eCanceled = 1001,
}
+enum CancelError {
+ eUserInitiated = 0,
+ eNoAgent = 1,
+ eInvalidAgentSignature = 2,
+ eErrorOther = 3,
+}
+
}
declare global {
-interface nsIContentAnalysisResponse extends nsISupports, Enums<typeof nsIContentAnalysisResponse.Action> {
+interface nsIContentAnalysisResponse extends nsISupports, Enums<typeof nsIContentAnalysisResponse.Action & typeof nsIContentAnalysisResponse.CancelError> {
readonly action: nsIContentAnalysisResponse.Action;
readonly shouldAllowContent: boolean;
+ readonly cancelError: nsIContentAnalysisResponse.CancelError;
readonly requestToken: string;
acknowledge(aCaa: nsIContentAnalysisAcknowledgement): void;
}
@@ -10887,6 +10884,7 @@ enum OperationType {
eCustomDisplayString = 0,
eClipboard = 1,
eDroppedText = 2,
+ eOperationPrint = 3,
}
}
@@ -10899,6 +10897,9 @@ interface nsIContentAnalysisRequest extends nsISupports, Enums<typeof nsIContent
readonly operationDisplayString: string;
readonly textContent: string;
readonly filePath: string;
+ readonly printDataHandle: u64;
+ readonly printDataSize: u64;
+ readonly printerName: string;
readonly url: nsIURI;
readonly sha256Digest: string;
readonly resources: nsIClientDownloadResource[];
@@ -10916,6 +10917,13 @@ interface nsIContentAnalysisCallback extends nsISupports {
error(aResult: nsresult): void;
}
+interface nsIContentAnalysisDiagnosticInfo extends nsISupports {
+ readonly connectedToAgent: boolean;
+ readonly agentPath: string;
+ readonly failedSignatureVerification: boolean;
+ readonly requestCount: i64;
+}
+
interface nsIContentAnalysis extends nsISupports {
readonly isActive: boolean;
readonly mightBeActive: boolean;
@@ -10926,6 +10934,7 @@ interface nsIContentAnalysis extends nsISupports {
respondToWarnDialog(aRequestToken: string, aAllowContent: boolean): void;
cancelAllRequests(): void;
testOnlySetCACmdLineArg(aVal: boolean): void;
+ getDiagnosticInfo(): Promise<any>;
}
// https://searchfox.org/mozilla-central/source/toolkit/components/cookiebanners/nsIClickRule.idl
@@ -11017,6 +11026,11 @@ interface nsICookieBannerService extends nsISupports, Enums<typeof nsICookieBann
resetDomainTelemetryRecord(aDomain?: string): void;
}
+// https://searchfox.org/mozilla-central/source/toolkit/components/cookiebanners/nsICookieBannerTelemetryService.idl
+
+interface nsICookieBannerTelemetryService extends nsISupports {
+}
+
// https://searchfox.org/mozilla-central/source/toolkit/components/cookiebanners/nsICookieRule.idl
interface nsICookieRule extends nsISupports {
@@ -11095,6 +11109,13 @@ interface nsIRFPService extends nsISupports {
testGenerateRandomKey(aChannel: nsIChannel): u8[];
}
+// https://searchfox.org/mozilla-central/source/toolkit/components/resistfingerprinting/nsIUserCharacteristicsPageService.idl
+
+interface nsIUserCharacteristicsPageService extends nsISupports {
+ createContentPage(): Promise<any>;
+ pageLoaded(browsingContext: BrowsingContext, data: any): void;
+}
+
// https://searchfox.org/mozilla-central/source/toolkit/components/search/nsISearchService.idl
interface nsISearchSubmission extends nsISupports {
@@ -11184,6 +11205,7 @@ interface nsISearchService extends nsISupports {
maybeSetAndOverrideDefault(extension: any): Promise<any>;
getDefaultEngineInfo(): any;
parseSubmissionURL(url: string): nsISearchParseSubmissionResult;
+ getAlternateDomains(domain: string): string[];
}
// https://searchfox.org/mozilla-central/source/toolkit/components/shell/nsIToolkitShellService.idl
@@ -11192,6 +11214,12 @@ interface nsIToolkitShellService extends nsISupports {
isDefaultApplication(): boolean;
}
+// https://searchfox.org/mozilla-central/source/toolkit/components/terminator/nsITerminatorTest.idl
+
+interface nsITerminatorTest extends nsISupports {
+ getTicksForShutdownPhases(): any;
+}
+
// https://searchfox.org/mozilla-central/source/toolkit/components/xulstore/nsIXULStore.idl
interface nsIXULStore extends nsISupports {
@@ -11992,6 +12020,7 @@ interface nsIWebBrowserPrint extends nsISupports {
readonly rawNumPages: i32;
readonly printPreviewNumPages: i32;
readonly printPreviewCurrentPageNumber: i32;
+ closeWindowAfterPrint: boolean;
printPreviewScrollToPage(aNavType: i16, aPageNum: i32): void;
exitPrintPreview(): void;
}
@@ -12178,7 +12207,6 @@ interface nsIBaseWindow extends nsISupports {
setPositionAndSize(x: i32, y: i32, cx: i32, cy: i32, flags: u32): void;
getPositionAndSize(x: OutParam<i32>, y: OutParam<i32>, cx: OutParam<i32>, cy: OutParam<i32>): void;
repaint(force: boolean): void;
- parentNativeWindow: nativeWindow;
readonly nativeHandle: string;
visibility: boolean;
enabled: boolean;
@@ -12498,6 +12526,8 @@ interface nsIGfxInfo extends nsISupports, Enums<typeof nsIGfxInfo.FontVisibility
readonly AzureCanvasBackend: string;
readonly AzureContentBackend: string;
readonly usingGPUProcess: boolean;
+ readonly usingRemoteCanvas: boolean;
+ readonly usingAcceleratedCanvas: boolean;
readonly hasBattery: boolean;
readonly DWriteVersion: string;
readonly cleartypeParameters: string;
@@ -13392,7 +13422,6 @@ interface nsIClassInfo extends nsISupports {
readonly RESERVED: 2147483648;
readonly interfaces: nsID[];
- getScriptableHelper(): nsIXPCScriptable;
readonly contractID: string;
readonly classDescription: string;
readonly classID: nsID;
@@ -13925,7 +13954,7 @@ interface nsIConverterInputStream extends nsIUnicharInputStream {
readonly DEFAULT_REPLACEMENT_CHARACTER: 65533;
readonly ERRORS_ARE_FATAL: 0;
- init(aStream: nsIInputStream, aCharset: string, aBufferSize: i32, aReplacementChar: char16_t): void;
+ init(aStream: nsIInputStream, aCharset: string, aBufferSize: i32, aReplacementChar: u16): void;
}
// https://searchfox.org/mozilla-central/source/xpcom/io/nsIConverterOutputStream.idl
@@ -14198,7 +14227,7 @@ interface nsIUnicharLineInputStream extends nsISupports {
// https://searchfox.org/mozilla-central/source/xpcom/io/nsIUnicharOutputStream.idl
interface nsIUnicharOutputStream extends nsISupports {
- write(aCount: u32, c: char16_t[]): boolean;
+ write(aCount: u32, c: u16[]): boolean;
writeString(str: string): boolean;
flush(): void;
close(): void;
@@ -14571,12 +14600,6 @@ interface nsIThread extends nsISerialEventTarget, Enums<typeof nsIThread.QoSPrio
// https://searchfox.org/mozilla-central/source/xpcom/threads/nsIThreadInternal.idl
-interface nsIThreadInternal extends nsIThread {
- observer: nsIThreadObserver;
- addObserver(observer: nsIThreadObserver): void;
- removeObserver(observer: nsIThreadObserver): void;
-}
-
// https://searchfox.org/mozilla-central/source/xpcom/threads/nsIThreadManager.idl
type nsINestedEventLoopCondition = Callable<{
@@ -14725,7 +14748,6 @@ interface nsIXPCComponents_Utils extends nsISupports {
waiveXrays(aVal: any): any;
unwaiveXrays(aVal: any): any;
getClassName(aObj: any, aUnwrap: boolean): string;
- getDOMClassInfo(aClassName: string): nsIClassInfo;
getIncumbentGlobal(callback?: any): any;
getDebugName(obj: any): string;
getWatchdogTimestamp(aCategory: string): PRTime;
@@ -14920,6 +14942,11 @@ interface nsIXPCTestUtils extends nsISupports {
doubleWrapFunction(f: nsIXPCTestFunctionInterface): nsIXPCTestFunctionInterface;
}
+interface nsIXPCTestTypeScript extends nsISupports {
+ exposedProp: i32;
+ exposedMethod(arg: i32): void;
+}
+
// https://searchfox.org/mozilla-central/source/dom/xul/nsIBrowserController.idl
interface nsIBrowserController extends nsISupports {
@@ -15059,7 +15086,6 @@ interface nsIXPCComponents_Interfaces {
nsIAutoCompleteResult: nsJSIID<nsIAutoCompleteResult>;
nsIAutoCompleteSearch: nsJSIID<nsIAutoCompleteSearch>;
nsIAutoCompleteObserver: nsJSIID<nsIAutoCompleteObserver>;
- nsIAutoCompleteSearchDescriptor: nsJSIID<nsIAutoCompleteSearchDescriptor>;
nsIAutoCompleteSimpleResult: nsJSIID<nsIAutoCompleteSimpleResult>;
nsIAutoCompleteSimpleResultListener: nsJSIID<nsIAutoCompleteSimpleResultListener>;
nsIAutoCompleteSimpleSearch: nsJSIID<nsIAutoCompleteSimpleSearch>;
@@ -15083,6 +15109,7 @@ interface nsIXPCComponents_Interfaces {
nsIChromeRegistry: nsJSIID<nsIChromeRegistry>;
nsIXULChromeRegistry: nsJSIID<nsIXULChromeRegistry>;
nsIToolkitChromeRegistry: nsJSIID<nsIToolkitChromeRegistry>;
+ nsICodeCoverage: nsJSIID<nsICodeCoverage>;
nsICommandManager: nsJSIID<nsICommandManager>;
nsICommandParams: nsJSIID<nsICommandParams>;
nsIControllerCommand: nsJSIID<nsIControllerCommand>;
@@ -15101,7 +15128,7 @@ interface nsIXPCComponents_Interfaces {
nsIDefaultAgent: nsJSIID<nsIDefaultAgent>;
nsIWindowsMutex: nsJSIID<nsIWindowsMutex>;
nsIWindowsMutexFactory: nsJSIID<nsIWindowsMutexFactory>;
- nsIDocShell: nsJSIID<nsIDocShell, typeof nsIDocShell.DocShellEnumeratorDirection & typeof nsIDocShell.AppType & typeof nsIDocShell.BusyFlags & typeof nsIDocShell.LoadCommand & typeof nsIDocShell.MetaViewportOverride>;
+ nsIDocShell: nsJSIID<nsIDocShell, typeof nsIDocShell.DocShellEnumeratorDirection & typeof nsIDocShell.AppType & typeof nsIDocShell.BusyFlags & typeof nsIDocShell.LoadCommand>;
nsIDocShellTreeItem: nsJSIID<nsIDocShellTreeItem>;
nsIDocShellTreeOwner: nsJSIID<nsIDocShellTreeOwner>;
nsIDocumentLoaderFactory: nsJSIID<nsIDocumentLoaderFactory>;
@@ -15467,7 +15494,6 @@ interface nsIXPCComponents_Interfaces {
nsINetworkPredictorVerifier: nsJSIID<nsINetworkPredictorVerifier>;
nsINullChannel: nsJSIID<nsINullChannel>;
nsIParentChannel: nsJSIID<nsIParentChannel>;
- nsIParentRedirectingChannel: nsJSIID<nsIParentRedirectingChannel>;
nsIPermission: nsJSIID<nsIPermission>;
nsIPermissionManager: nsJSIID<nsIPermissionManager>;
nsIPrivateBrowsingChannel: nsJSIID<nsIPrivateBrowsingChannel>;
@@ -15726,9 +15752,9 @@ interface nsIXPCComponents_Interfaces {
nsIApplicationReputationQuery: nsJSIID<nsIApplicationReputationQuery>;
nsIApplicationReputationCallback: nsJSIID<nsIApplicationReputationCallback>;
mozISandboxSettings: nsJSIID<mozISandboxSettings>;
- nsIFormAutoComplete: nsJSIID<nsIFormAutoComplete>;
- nsIFormAutoCompleteObserver: nsJSIID<nsIFormAutoCompleteObserver>;
nsIFormFillController: nsJSIID<nsIFormFillController>;
+ nsIFormFillCompleteObserver: nsJSIID<nsIFormFillCompleteObserver>;
+ nsIFormHistoryAutoComplete: nsJSIID<nsIFormHistoryAutoComplete>;
mozIAppServicesLogger: nsJSIID<mozIAppServicesLogger>;
mozIBridgedSyncEngineCallback: nsJSIID<mozIBridgedSyncEngineCallback>;
mozIBridgedSyncEngineApplyCallback: nsJSIID<mozIBridgedSyncEngineApplyCallback>;
@@ -15802,16 +15828,18 @@ interface nsIXPCComponents_Interfaces {
nsIClearDataService: nsJSIID<nsIClearDataService>;
nsIClearDataCallback: nsJSIID<nsIClearDataCallback>;
nsIContentAnalysisAcknowledgement: nsJSIID<nsIContentAnalysisAcknowledgement, typeof nsIContentAnalysisAcknowledgement.Result & typeof nsIContentAnalysisAcknowledgement.FinalAction>;
- nsIContentAnalysisResponse: nsJSIID<nsIContentAnalysisResponse, typeof nsIContentAnalysisResponse.Action>;
+ nsIContentAnalysisResponse: nsJSIID<nsIContentAnalysisResponse, typeof nsIContentAnalysisResponse.Action & typeof nsIContentAnalysisResponse.CancelError>;
nsIClientDownloadResource: nsJSIID<nsIClientDownloadResource>;
nsIContentAnalysisRequest: nsJSIID<nsIContentAnalysisRequest, typeof nsIContentAnalysisRequest.AnalysisType & typeof nsIContentAnalysisRequest.OperationType>;
nsIContentAnalysisResult: nsJSIID<nsIContentAnalysisResult>;
nsIContentAnalysisCallback: nsJSIID<nsIContentAnalysisCallback>;
+ nsIContentAnalysisDiagnosticInfo: nsJSIID<nsIContentAnalysisDiagnosticInfo>;
nsIContentAnalysis: nsJSIID<nsIContentAnalysis>;
nsIClickRule: nsJSIID<nsIClickRule, typeof nsIClickRule.RunContext>;
nsICookieBannerListService: nsJSIID<nsICookieBannerListService>;
nsICookieBannerRule: nsJSIID<nsICookieBannerRule>;
nsICookieBannerService: nsJSIID<nsICookieBannerService, typeof nsICookieBannerService.Modes>;
+ nsICookieBannerTelemetryService: nsJSIID<nsICookieBannerTelemetryService>;
nsICookieRule: nsJSIID<nsICookieRule>;
nsICrashService: nsJSIID<nsICrashService>;
nsIFinalizationWitnessService: nsJSIID<nsIFinalizationWitnessService>;
@@ -15822,11 +15850,13 @@ interface nsIXPCComponents_Interfaces {
nsIFingerprintingOverride: nsJSIID<nsIFingerprintingOverride>;
nsIFingerprintingWebCompatService: nsJSIID<nsIFingerprintingWebCompatService>;
nsIRFPService: nsJSIID<nsIRFPService>;
+ nsIUserCharacteristicsPageService: nsJSIID<nsIUserCharacteristicsPageService>;
nsISearchSubmission: nsJSIID<nsISearchSubmission>;
nsISearchEngine: nsJSIID<nsISearchEngine>;
nsISearchParseSubmissionResult: nsJSIID<nsISearchParseSubmissionResult>;
nsISearchService: nsJSIID<nsISearchService>;
nsIToolkitShellService: nsJSIID<nsIToolkitShellService>;
+ nsITerminatorTest: nsJSIID<nsITerminatorTest>;
nsIXULStore: nsJSIID<nsIXULStore>;
nsITransaction: nsJSIID<nsITransaction>;
nsITransactionManager: nsJSIID<nsITransactionManager>;
@@ -16112,7 +16142,6 @@ interface nsIXPCComponents_Interfaces {
nsISerialEventTarget: nsJSIID<nsISerialEventTarget>;
nsISupportsPriority: nsJSIID<nsISupportsPriority>;
nsIThread: nsJSIID<nsIThread, typeof nsIThread.QoSPriority>;
- nsIThreadInternal: nsJSIID<nsIThreadInternal>;
nsINestedEventLoopCondition: nsJSIID<nsINestedEventLoopCondition>;
nsIThreadManager: nsJSIID<nsIThreadManager>;
nsIThreadShutdown: nsJSIID<nsIThreadShutdown>;
@@ -16142,6 +16171,7 @@ interface nsIXPCComponents_Interfaces {
nsIXPCTestReturnCodeChild: nsJSIID<nsIXPCTestReturnCodeChild>;
nsIXPCTestFunctionInterface: nsJSIID<nsIXPCTestFunctionInterface>;
nsIXPCTestUtils: nsJSIID<nsIXPCTestUtils>;
+ nsIXPCTestTypeScript: nsJSIID<nsIXPCTestTypeScript>;
nsIBrowserController: nsJSIID<nsIBrowserController>;
nsIController: nsJSIID<nsIController>;
nsICommandController: nsJSIID<nsICommandController>;
@@ -16166,7 +16196,6 @@ type PRTime = i64;
type PivotMoveReason = i16;
type PredictorLearnReason = u32;
type PredictorPredictReason = u32;
-type char16_t = u16;
type nsBitsErrorAction = i32;
type nsBitsErrorStage = i32;
type nsBitsErrorType = i32;
@@ -16182,35 +16211,53 @@ type nsServerSocketFlag = u32;
type nsSuspendedTypes = u32;
type nsTaskbarProgressState = i32;
type nsViewID = u64;
-type nsresult = u32;
-
-/**
- * Gecko XPCOM builtins and utility types.
- */
/**
- * Generic IDs are created by most code which passes a nsID to js.
- * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#24
+ * Gecko XPCOM builtins.
*/
-interface nsID<uuid = string> {
- readonly number: uuid;
+declare global {
+ /**
+ * Generic IDs are created by most code which passes a nsID to js.
+ * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#24
+ */
+ interface nsID<uuid = string> {
+ readonly number: uuid;
+ }
+
+ /**
+ * In addition to nsID, interface IIDs support instanceof type guards,
+ * and expose constants defined on the class, including variants from enums.
+ * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#45
+ */
+ type nsJSIID<iface, enums = {}> = nsID & Constants<iface> & enums & {
+ new (_: never): void;
+ prototype: iface;
+ }
+
+ /** A union type of all known interface IIDs. */
+ type nsIID = nsIXPCComponents_Interfaces[keyof nsIXPCComponents_Interfaces];
+
+ /** A generic to resolve QueryInterface return type from a nsIID. */
+ export type nsQIResult<iid> = iid extends { prototype: infer U } ? U : never;
+
+ /** u32 */
+ type nsresult = u32;
+
+ // Numeric typedefs, useful as a quick reference in method signatures.
+ type double = number;
+ type float = number;
+ type i16 = number;
+ type i32 = number;
+ type i64 = number;
+ type u16 = number;
+ type u32 = number;
+ type u64 = number;
+ type u8 = number;
}
/**
- * In addition to nsID, interface IIDs support instanceof type guards,
- * and expose constants defined on the class, including variants from enums.
- * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#44
+ * XPCOM utility types.
*/
-type nsJSIID<iface, enums = {}> = nsID & Constants<iface> & enums & {
- new (_: never): void;
- prototype: iface;
-}
-
-/** A union of all known IIDs. */
-type nsIID = nsIXPCComponents_Interfaces[keyof nsIXPCComponents_Interfaces];
-
-/** A generic to resolve QueryInterface return type from a nsID (or nsIID). */
-export type nsQIResult<iid> = iid extends { prototype: infer U } ? U : never;
/** XPCOM inout param is passed in as a js object with a value property. */
type InOutParam<T> = { value: T };
@@ -16218,7 +16265,7 @@ type InOutParam<T> = { value: T };
/** XPCOM out param is written to the passed in object's value property. */
type OutParam<T> = { value?: T };
-/** A named type for interfaces to inherit from enums. */
+/** A named type to enable interfaces to inherit from enums. */
type Enums<enums> = enums;
/** Callable accepts either form of a [function] interface. */
@@ -16230,42 +16277,4 @@ type Constants<T> = { [K in keyof T as IfConst<K, T[K]>]: T[K] };
/** Resolves only for keys K whose corresponding type T is a narrow number. */
type IfConst<K, T> = T extends number ? (number extends T ? never : K) : never;
-declare global {
- // Until we have [ChromeOnly] webidl.
- interface BrowsingContext {}
- interface ContentFrameMessageManager {}
- interface DOMRequest {}
- interface FrameLoader {}
- interface JSProcessActorChild {}
- interface JSProcessActorParent {}
- interface TreeColumn {}
- interface WebExtensionContentScript {}
- interface WebExtensionPolicy {}
- interface WindowGlobalParent {}
- interface WindowContext {}
- interface XULTreeElement {}
-}
-
-// Non-scriptable interfaces referenced from scriptable ones.
-interface nsIAsyncVerifyRedirectReadyCallback {}
-interface nsICRLiteTimestamp {}
-interface nsIInputAvailableCallback {}
-interface nsIScriptElement {}
-interface nsIThreadObserver {}
-interface nsIUDPSocketSyncListener {}
-interface nsIWebAuthnRegisterArgs {}
-interface nsIWebAuthnRegisterPromise {}
-interface nsIWebAuthnSignArgs {}
-interface nsIWebAuthnSignPromise {}
-interface nsIXPCScriptable {}
-
-// Typedefs useful as a quick reference in method signatures.
-type double = number;
-type float = number;
-type i16 = number;
-type i32 = number;
-type i64 = number;
-type u16 = number;
-type u32 = number;
-type u64 = number;
-type u8 = number;
+export {};
diff --git a/tools/browsertime/mach_commands.py b/tools/browsertime/mach_commands.py
index f0e90445e9..a75a4d9b5d 100644
--- a/tools/browsertime/mach_commands.py
+++ b/tools/browsertime/mach_commands.py
@@ -44,7 +44,7 @@ import time
import mozpack.path as mozpath
from mach.decorators import Command, CommandArgument
from mozbuild.base import BinaryNotFoundException, MachCommandBase
-from mozbuild.util import mkdir
+from mozbuild.dirutils import mkdir
from six import StringIO
AUTOMATION = "MOZ_AUTOMATION" in os.environ
diff --git a/tools/esmify/import-to-import_esmodule.js b/tools/esmify/import-to-import_esmodule.js
deleted file mode 100644
index d8e0aee5bb..0000000000
--- a/tools/esmify/import-to-import_esmodule.js
+++ /dev/null
@@ -1,472 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// jscodeshift rule to replace import calls for JSM with import calls for ESM
-// or static import for ESM.
-
-/* eslint-env node */
-
-const _path = require("path");
-const { isESMified } = require(_path.resolve(__dirname, "./is-esmified.js"));
-const {
- jsmExtPattern,
- esmifyExtension,
- isIdentifier,
- isString,
- warnForPath,
- getPrevStatement,
- getNextStatement,
- isMemberExpressionWithIdentifiers,
- rewriteMemberExpressionWithIdentifiers,
- createMemberExpressionWithIdentifiers,
-} = require(_path.resolve(__dirname, "./utils.js"));
-const {
- isImportESModuleCall,
- replaceImportESModuleCall,
- tryReplacingWithStaticImport,
-} = require(_path.resolve(__dirname, "./static-import.js"));
-
-module.exports = function (fileInfo, api) {
- const { jscodeshift } = api;
- const root = jscodeshift(fileInfo.source);
- doTranslate(fileInfo.path, jscodeshift, root);
- return root.toSource({ lineTerminator: "\n" });
-};
-
-module.exports.doTranslate = doTranslate;
-
-function isESMifiedAndTarget(resourceURI) {
- const files = [];
- if (!isESMified(resourceURI, files)) {
- return false;
- }
-
- if ("ESMIFY_TARGET_PREFIX" in process.env) {
- const targetPrefix = process.env.ESMIFY_TARGET_PREFIX;
- for (const esm of files) {
- if (esm.startsWith(targetPrefix)) {
- return true;
- }
- }
-
- return false;
- }
-
- return true;
-}
-
-const importCalls = [
- {
- from: ["Cu", "import"],
- to: ["ChromeUtils", "importESModule"],
- },
- {
- from: ["ChromeUtils", "import"],
- to: ["ChromeUtils", "importESModule"],
- },
- {
- from: ["SpecialPowers", "ChromeUtils", "import"],
- to: ["SpecialPowers", "ChromeUtils", "importESModule"],
- },
-];
-
-const singleLazyGetterCalls = [
- {
- from: ["ChromeUtils", "defineModuleGetter"],
- to: ["ChromeUtils", "defineESModuleGetters"],
- },
- {
- from: ["SpecialPowers", "ChromeUtils", "defineModuleGetter"],
- to: ["SpecialPowers", "ChromeUtils", "defineESModuleGetters"],
- },
-];
-
-const multiLazyGettersCalls = [
- {
- from: ["XPCOMUtils", "defineLazyModuleGetters"],
- to: ["ChromeUtils", "defineESModuleGetters"],
- },
-];
-
-function isMemberExpressionMatchingPatterns(node, patterns) {
- for (const item of patterns) {
- if (isMemberExpressionWithIdentifiers(node, item.from)) {
- return item;
- }
- }
-
- return null;
-}
-
-function replaceImportCall(inputFile, jscodeshift, path, rewriteItem) {
- if (path.node.arguments.length !== 1) {
- warnForPath(inputFile, path, `import call should have only one argument`);
- return;
- }
-
- const resourceURINode = path.node.arguments[0];
- if (!isString(resourceURINode)) {
- warnForPath(inputFile, path, `resource URI should be a string`);
- return;
- }
-
- const resourceURI = resourceURINode.value;
- if (!resourceURI.match(jsmExtPattern)) {
- warnForPath(inputFile, path, `Non-jsm: ${resourceURI}`);
- return;
- }
-
- if (!isESMifiedAndTarget(resourceURI)) {
- return;
- }
-
- if (
- !tryReplacingWithStaticImport(
- jscodeshift,
- inputFile,
- path,
- resourceURINode,
- false
- )
- ) {
- rewriteMemberExpressionWithIdentifiers(path.node.callee, rewriteItem.to);
- resourceURINode.value = esmifyExtension(resourceURI);
- }
-}
-
-// Find `ChromeUtils.defineESModuleGetters` or variant statement specified by
-// expectedIDs, adjacent to `path` which uses the same target object.
-function findDefineESModuleGettersStmt(path, expectedIDs) {
- // `path` must be top-level.
- if (path.parent.node.type !== "ExpressionStatement") {
- return null;
- }
-
- if (path.parent.parent.node.type !== "Program") {
- return null;
- }
-
- // Get previous or next statement with ChromeUtils.defineESModuleGetters.
- let callStmt;
- const prev = getPrevStatement(path.parent);
- if (
- prev &&
- prev.type === "ExpressionStatement" &&
- prev.expression.type === "CallExpression" &&
- isMemberExpressionWithIdentifiers(prev.expression.callee, expectedIDs)
- ) {
- callStmt = prev;
- } else {
- const next = getNextStatement(path.parent);
- if (
- next &&
- next.type === "ExpressionStatement" &&
- next.expression.type === "CallExpression" &&
- isMemberExpressionWithIdentifiers(next.expression.callee, expectedIDs)
- ) {
- callStmt = next;
- } else {
- return null;
- }
- }
-
- const call = callStmt.expression;
-
- if (call.arguments.length !== 2) {
- return null;
- }
-
- const modulesNode = call.arguments[1];
- if (modulesNode.type !== "ObjectExpression") {
- return null;
- }
-
- // Check if the target object is same.
- if (
- path.node.arguments[0].type === "ThisExpression" &&
- call.arguments[0].type === "ThisExpression"
- ) {
- return callStmt;
- }
-
- if (
- path.node.arguments[0].type === "Identifier" &&
- call.arguments[0].type === "Identifier" &&
- path.node.arguments[0].name === call.arguments[0].name
- ) {
- return callStmt;
- }
-
- return null;
-}
-
-function getPropKeyString(prop) {
- if (prop.key.type === "Identifier") {
- return prop.key.name;
- }
-
- if (prop.key.type === "Literal") {
- return prop.key.value.toString();
- }
-
- return "";
-}
-
-function sortProps(obj) {
- obj.properties.sort((a, b) => {
- return getPropKeyString(a) < getPropKeyString(b) ? -1 : 1;
- });
-}
-
-// Move comments above `nodeFrom` before `nodeTo`.
-function moveComments(nodeTo, nodeFrom) {
- if (!nodeFrom.comments) {
- return;
- }
- if (nodeTo.comments) {
- nodeTo.comments = [...nodeTo.comments, ...nodeFrom.comments];
- } else {
- nodeTo.comments = nodeFrom.comments;
- }
- nodeFrom.comments = [];
-}
-
-function replaceLazyGetterCall(inputFile, jscodeshift, path, rewriteItem) {
- if (path.node.arguments.length !== 3) {
- warnForPath(inputFile, path, `lazy getter call should have 3 arguments`);
- return;
- }
-
- const nameNode = path.node.arguments[1];
- if (!isString(nameNode)) {
- warnForPath(inputFile, path, `name should be a string`);
- return;
- }
-
- const resourceURINode = path.node.arguments[2];
- if (!isString(resourceURINode)) {
- warnForPath(inputFile, path, `resource URI should be a string`);
- return;
- }
-
- const resourceURI = resourceURINode.value;
- if (!resourceURI.match(jsmExtPattern)) {
- warnForPath(inputFile, path, `Non-js/jsm: ${resourceURI}`);
- return;
- }
-
- if (!isESMifiedAndTarget(resourceURI)) {
- return;
- }
-
- resourceURINode.value = esmifyExtension(resourceURI);
- const prop = jscodeshift.property(
- "init",
- jscodeshift.identifier(nameNode.value),
- resourceURINode
- );
-
- const callStmt = findDefineESModuleGettersStmt(path, rewriteItem.to);
- if (callStmt) {
- // Move a property to existing ChromeUtils.defineESModuleGetters call.
-
- moveComments(callStmt, path.parent.node);
- path.parent.prune();
-
- callStmt.expression.arguments[1].properties.push(prop);
- sortProps(callStmt.expression.arguments[1]);
- } else {
- // Convert this call into ChromeUtils.defineESModuleGetters.
-
- rewriteMemberExpressionWithIdentifiers(path.node.callee, rewriteItem.to);
- path.node.arguments = [
- path.node.arguments[0],
- jscodeshift.objectExpression([prop]),
- ];
- }
-}
-
-function replaceLazyGettersCall(inputFile, jscodeshift, path, rewriteItem) {
- if (path.node.arguments.length !== 2) {
- warnForPath(inputFile, path, `lazy getters call should have 2 arguments`);
- return;
- }
-
- const modulesNode = path.node.arguments[1];
- if (modulesNode.type !== "ObjectExpression") {
- warnForPath(inputFile, path, `modules parameter should be an object`);
- return;
- }
-
- const esmProps = [];
- const jsmProps = [];
-
- for (const prop of modulesNode.properties) {
- const resourceURINode = prop.value;
- if (!isString(resourceURINode)) {
- warnForPath(inputFile, path, `resource URI should be a string`);
- jsmProps.push(prop);
- continue;
- }
-
- const resourceURI = resourceURINode.value;
- if (!resourceURI.match(jsmExtPattern)) {
- warnForPath(inputFile, path, `Non-js/jsm: ${resourceURI}`);
- jsmProps.push(prop);
- continue;
- }
-
- if (!isESMifiedAndTarget(resourceURI)) {
- jsmProps.push(prop);
- continue;
- }
-
- esmProps.push(prop);
- }
-
- if (esmProps.length === 0) {
- return;
- }
-
- let callStmt = findDefineESModuleGettersStmt(path, rewriteItem.to);
- if (jsmProps.length === 0) {
- if (callStmt) {
- // Move all properties to existing ChromeUtils.defineESModuleGetters call.
-
- moveComments(callStmt, path.parent.node);
- path.parent.prune();
-
- for (const prop of esmProps) {
- const resourceURINode = prop.value;
- resourceURINode.value = esmifyExtension(resourceURINode.value);
- callStmt.expression.arguments[1].properties.push(prop);
- }
- sortProps(callStmt.expression.arguments[1]);
- } else {
- // Convert this call into ChromeUtils.defineESModuleGetters.
-
- rewriteMemberExpressionWithIdentifiers(path.node.callee, rewriteItem.to);
- for (const prop of esmProps) {
- const resourceURINode = prop.value;
- resourceURINode.value = esmifyExtension(resourceURINode.value);
- }
- }
- } else {
- // Move some properties to ChromeUtils.defineESModuleGetters.
-
- if (path.parent.node.type !== "ExpressionStatement") {
- warnForPath(inputFile, path, `lazy getters call in unexpected context`);
- return;
- }
-
- if (!callStmt) {
- callStmt = jscodeshift.expressionStatement(
- jscodeshift.callExpression(
- createMemberExpressionWithIdentifiers(jscodeshift, rewriteItem.to),
- [path.node.arguments[0], jscodeshift.objectExpression([])]
- )
- );
- path.parent.insertBefore(callStmt);
- }
-
- moveComments(callStmt, path.parent.node);
-
- for (const prop of esmProps) {
- const resourceURINode = prop.value;
- resourceURINode.value = esmifyExtension(resourceURINode.value);
- callStmt.expression.arguments[1].properties.push(prop);
- }
- sortProps(callStmt.expression.arguments[1]);
-
- path.node.arguments[1].properties = jsmProps;
- }
-}
-
-function getProp(obj, key) {
- if (obj.type !== "ObjectExpression") {
- return null;
- }
-
- for (const prop of obj.properties) {
- if (prop.computed) {
- continue;
- }
-
- if (!prop.key) {
- continue;
- }
-
- if (isIdentifier(prop.key, key)) {
- return prop;
- }
- }
-
- return null;
-}
-
-function tryReplaceActorDefinition(inputFile, path, name) {
- const obj = path.node;
-
- const prop = getProp(obj, name);
- if (!prop) {
- return;
- }
-
- const moduleURIProp = getProp(prop.value, "moduleURI");
- if (!moduleURIProp) {
- return;
- }
-
- if (!isString(moduleURIProp.value)) {
- warnForPath(inputFile, path, `${name} moduleURI should be a string`);
- return;
- }
-
- const moduleURI = moduleURIProp.value.value;
- if (!moduleURI.match(jsmExtPattern)) {
- warnForPath(inputFile, path, `${name} Non-js/jsm: ${moduleURI}`);
- return;
- }
-
- if (!isESMifiedAndTarget(moduleURI)) {
- return;
- }
-
- moduleURIProp.key.name = "esModuleURI";
- moduleURIProp.value.value = esmifyExtension(moduleURI);
-}
-
-function doTranslate(inputFile, jscodeshift, root) {
- root.find(jscodeshift.CallExpression).forEach(path => {
- if (isImportESModuleCall(path.node)) {
- replaceImportESModuleCall(inputFile, jscodeshift, path, false);
- return;
- }
-
- const callee = path.node.callee;
-
- let item;
- item = isMemberExpressionMatchingPatterns(callee, importCalls);
- if (item) {
- replaceImportCall(inputFile, jscodeshift, path, item);
- return;
- }
-
- item = isMemberExpressionMatchingPatterns(callee, singleLazyGetterCalls);
- if (item) {
- replaceLazyGetterCall(inputFile, jscodeshift, path, item);
- return;
- }
-
- item = isMemberExpressionMatchingPatterns(callee, multiLazyGettersCalls);
- if (item) {
- replaceLazyGettersCall(inputFile, jscodeshift, path, item);
- }
- });
-
- root.find(jscodeshift.ObjectExpression).forEach(path => {
- tryReplaceActorDefinition(inputFile, path, "parent");
- tryReplaceActorDefinition(inputFile, path, "child");
- });
-}
diff --git a/tools/esmify/is-esmified.js b/tools/esmify/is-esmified.js
deleted file mode 100644
index 978e804f4b..0000000000
--- a/tools/esmify/is-esmified.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// A utility to check if given JSM is already ESM-ified.
-
-/* eslint-env node */
-
-const fs = require("fs");
-const _path = require("path");
-const { esmifyExtension } = require(_path.resolve(__dirname, "./utils.js"));
-
-let json_map;
-if (process.env.ESMIFY_MAP_JSON) {
- json_map = _path.resolve(process.env.ESMIFY_MAP_JSON);
-} else {
- json_map = _path.resolve(__dirname, "./map.json");
-}
-const uri_map = JSON.parse(fs.readFileSync(json_map));
-const esm_uri_map = generateESMURIMap(uri_map);
-
-function generateESMURIMap(jsm_map) {
- const esm_map = {};
-
- for (let [uri, jsms] of Object.entries(jsm_map)) {
- if (typeof jsms === "string") {
- jsms = [jsms];
- }
- esm_map[esmifyExtension(uri)] = jsms.map(esmifyExtension);
- }
-
- return esm_map;
-}
-
-function isESMifiedSlow(resourceURI) {
- if (!(resourceURI in uri_map)) {
- console.warn(`WARNING: Unknown module: ${resourceURI}`);
- return { result: false, jsms: [] };
- }
-
- let jsms = uri_map[resourceURI];
- if (typeof jsms === "string") {
- jsms = [jsms];
- }
-
- const prefix = "../../";
- for (const jsm of jsms) {
- if (fs.existsSync(prefix + jsm)) {
- return { result: false, jsms };
- }
- const esm = esmifyExtension(jsm);
- if (!fs.existsSync(prefix + esm)) {
- return { result: false, jsms };
- }
- }
-
- return { result: true, jsms };
-}
-
-const isESMified_memo = {};
-function isESMified(resourceURI, files) {
- if (!(resourceURI in isESMified_memo)) {
- isESMified_memo[resourceURI] = isESMifiedSlow(resourceURI);
- }
-
- for (const jsm of isESMified_memo[resourceURI].jsms) {
- files.push(esmifyExtension(jsm));
- }
-
- return isESMified_memo[resourceURI].result;
-}
-
-function getESMFiles(resourceURI) {
- if (resourceURI in esm_uri_map) {
- return esm_uri_map[resourceURI];
- }
- return [];
-}
-
-exports.isESMified = isESMified;
-exports.getESMFiles = getESMFiles;
diff --git a/tools/esmify/mach_commands.py b/tools/esmify/mach_commands.py
deleted file mode 100644
index 7b72c7b0e3..0000000000
--- a/tools/esmify/mach_commands.py
+++ /dev/null
@@ -1,908 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-import json
-import logging
-import os
-import pathlib
-import re
-import subprocess
-import sys
-
-from mach.decorators import Command, CommandArgument
-
-
-def path_sep_to_native(path_str):
- """Make separators in the path OS native."""
- return pathlib.os.sep.join(path_str.split("/"))
-
-
-def path_sep_from_native(path):
- """Make separators in the path OS native."""
- return "/".join(str(path).split(pathlib.os.sep))
-
-
-excluded_from_convert_prefix = list(
- map(
- path_sep_to_native,
- [
- # Testcases for actors.
- "toolkit/actors/TestProcessActorChild.jsm",
- "toolkit/actors/TestProcessActorParent.jsm",
- "toolkit/actors/TestWindowChild.jsm",
- "toolkit/actors/TestWindowParent.jsm",
- "js/xpconnect/tests/unit/",
- # Testcase for build system.
- "python/mozbuild/mozbuild/test/",
- ],
- )
-)
-
-
-def is_excluded_from_convert(path):
- """Returns true if the JSM file shouldn't be converted to ESM."""
- path_str = str(path)
- for prefix in excluded_from_convert_prefix:
- if path_str.startswith(prefix):
- return True
-
- return False
-
-
-excluded_from_imports_prefix = list(
- map(
- path_sep_to_native,
- [
- # Vendored or auto-generated files.
- "browser/components/pocket/content/panels/js/vendor.bundle.js",
- "devtools/client/debugger/dist/parser-worker.js",
- "devtools/client/debugger/test/mochitest/examples/react/build/main.js",
- "devtools/client/debugger/test/mochitest/examples/sourcemapped/polyfill-bundle.js",
- "devtools/client/inspector/markup/test/shadowdom_open_debugger.min.js",
- "devtools/client/shared/source-map-loader/test/browser/fixtures/bundle.js",
- "layout/style/test/property_database.js",
- "services/fxaccounts/FxAccountsPairingChannel.js",
- "testing/web-platform/",
- # Unrelated testcases that has edge case syntax.
- "browser/components/sessionstore/test/unit/data/",
- "devtools/client/debugger/src/workers/parser/tests/fixtures/",
- "devtools/client/debugger/test/mochitest/examples/sourcemapped/fixtures/",
- "devtools/client/webconsole/test/browser/test-syntaxerror-worklet.js",
- "devtools/server/tests/xpcshell/test_framebindings-03.js",
- "devtools/server/tests/xpcshell/test_framebindings-04.js",
- "devtools/shared/tests/xpcshell/test_eventemitter_basic.js",
- "devtools/shared/tests/xpcshell/test_eventemitter_static.js",
- "dom/base/crashtests/module-with-syntax-error.js",
- "dom/base/test/file_bug687859-16.js",
- "dom/base/test/file_bug687859-16.js",
- "dom/base/test/file_js_cache_syntax_error.js",
- "dom/base/test/jsmodules/module_badSyntax.js",
- "dom/canvas/test/reftest/webgl-utils.js",
- "dom/encoding/test/file_utf16_be_bom.js",
- "dom/encoding/test/file_utf16_le_bom.js",
- "dom/html/test/bug649134/file_bug649134-1.sjs",
- "dom/html/test/bug649134/file_bug649134-2.sjs",
- "dom/media/webrtc/tests/mochitests/identity/idp-bad.js",
- "dom/serviceworkers/test/file_js_cache_syntax_error.js",
- "dom/serviceworkers/test/parse_error_worker.js",
- "dom/workers/test/importScripts_worker_imported3.js",
- "dom/workers/test/invalid.js",
- "dom/workers/test/threadErrors_worker1.js",
- "dom/xhr/tests/browser_blobFromFile.js",
- "image/test/browser/browser_image.js",
- "js/xpconnect/tests/chrome/test_bug732665_meta.js",
- "js/xpconnect/tests/mochitest/class_static_worker.js",
- "js/xpconnect/tests/unit/bug451678_subscript.js",
- "js/xpconnect/tests/unit/error_other.sys.mjs",
- "js/xpconnect/tests/unit/es6module_parse_error.js",
- "js/xpconnect/tests/unit/recursive_importA.jsm",
- "js/xpconnect/tests/unit/recursive_importB.jsm",
- "js/xpconnect/tests/unit/syntax_error.jsm",
- "js/xpconnect/tests/unit/test_defineModuleGetter.js",
- "js/xpconnect/tests/unit/test_import.js",
- "js/xpconnect/tests/unit/test_import_shim.js",
- "js/xpconnect/tests/unit/test_recursive_import.js",
- "js/xpconnect/tests/unit/test_unload.js",
- "modules/libpref/test/unit/data/testParser.js",
- "python/mozbuild/mozbuild/test/",
- "remote/shared/messagehandler/test/browser/resources/modules/root/invalid.sys.mjs",
- "testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.js",
- "testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.js",
- "toolkit/components/reader/Readerable.sys.mjs",
- "toolkit/components/workerloader/tests/moduleF-syntax-error.js",
- "tools/lint/test/",
- "tools/update-packaging/test/",
- # SpiderMonkey internals.
- "js/examples/",
- "js/src/",
- # Files has macro.
- "browser/app/profile/firefox.js",
- "browser/branding/official/pref/firefox-branding.js",
- "browser/components/enterprisepolicies/schemas/schema.sys.mjs",
- "browser/locales/en-US/firefox-l10n.js",
- "mobile/android/app/geckoview-prefs.js",
- "mobile/android/locales/en-US/mobile-l10n.js",
- "modules/libpref/greprefs.js",
- "modules/libpref/init/all.js",
- "testing/condprofile/condprof/tests/profile/user.js",
- "testing/mozbase/mozprofile/tests/files/prefs_with_comments.js",
- "toolkit/modules/AppConstants.sys.mjs",
- "toolkit/mozapps/update/tests/data/xpcshellConstantsPP.js",
- # Uniffi templates
- "toolkit/components/uniffi-bindgen-gecko-js/src/templates/js/",
- ],
- )
-)
-
-EXCLUSION_FILES = [
- os.path.join("tools", "rewriting", "Generated.txt"),
- os.path.join("tools", "rewriting", "ThirdPartyPaths.txt"),
-]
-
-
-def load_exclusion_files():
- for path in EXCLUSION_FILES:
- with open(path, "r") as f:
- for line in f:
- p = path_sep_to_native(re.sub(r"\*$", "", line.strip()))
- excluded_from_imports_prefix.append(p)
-
-
-def is_excluded_from_imports(path):
- """Returns true if the JS file content shouldn't be handled by
- jscodeshift.
-
- This filter is necessary because jscodeshift cannot handle some
- syntax edge cases and results in unexpected rewrite."""
- path_str = str(path)
- for prefix in excluded_from_imports_prefix:
- if path_str.startswith(prefix):
- return True
-
- return False
-
-
-# Wrapper for hg/git operations
-class VCSUtils:
- def run(self, cmd):
- # Do not pass check=True because the pattern can match no file.
- lines = subprocess.run(cmd, stdout=subprocess.PIPE).stdout.decode()
- return filter(lambda x: x != "", lines.split("\n"))
-
-
-class HgUtils(VCSUtils):
- def is_available():
- return pathlib.Path(".hg").exists()
-
- def rename(self, before, after):
- cmd = ["hg", "rename", before, after]
- subprocess.run(cmd, check=True)
-
- def find_jsms(self, path):
- jsms = []
-
- # NOTE: `set:glob:` syntax does not accept backslash on windows.
- path = path_sep_from_native(path)
-
- cmd = ["hg", "files", f'set:glob:"{path}/**/*.jsm"']
- for line in self.run(cmd):
- jsm = pathlib.Path(line)
- if is_excluded_from_convert(jsm):
- continue
- jsms.append(jsm)
-
- cmd = [
- "hg",
- "files",
- rf"set:grep('EXPORTED_SYMBOLS = \[') and glob:\"{path}/**/*.js\"",
- ]
- for line in self.run(cmd):
- jsm = pathlib.Path(line)
- if is_excluded_from_convert(jsm):
- continue
- jsms.append(jsm)
-
- return jsms
-
- def find_all_jss(self, path):
- jss = []
-
- # NOTE: `set:glob:` syntax does not accept backslash on windows.
- path = path_sep_from_native(path)
-
- cmd = [
- "hg",
- "files",
- f'set:glob:"{path}/**/*.jsm" or glob:"{path}/**/*.js" or '
- + f'glob:"{path}/**/*.mjs" or glob:"{path}/**/*.sjs"',
- ]
- for line in self.run(cmd):
- js = pathlib.Path(line)
- if is_excluded_from_imports(js):
- continue
- jss.append(js)
-
- return jss
-
-
-class GitUtils(VCSUtils):
- def is_available():
- return pathlib.Path(".git").exists()
-
- def rename(self, before, after):
- cmd = ["git", "mv", before, after]
- subprocess.run(cmd, check=True)
-
- def find_jsms(self, path):
- jsms = []
-
- cmd = ["git", "ls-files", f"{path}/*.jsm"]
- for line in self.run(cmd):
- jsm = pathlib.Path(line)
- if is_excluded_from_convert(jsm):
- continue
- jsms.append(jsm)
-
- handled = {}
- cmd = ["git", "grep", "EXPORTED_SYMBOLS = \\[", f"{path}/*.js"]
- for line in self.run(cmd):
- m = re.search("^([^:]+):", line)
- if not m:
- continue
- filename = m.group(1)
- if filename in handled:
- continue
- handled[filename] = True
- jsm = pathlib.Path(filename)
- if is_excluded_from_convert(jsm):
- continue
- jsms.append(jsm)
-
- return jsms
-
- def find_all_jss(self, path):
- jss = []
-
- cmd = [
- "git",
- "ls-files",
- f"{path}/*.jsm",
- f"{path}/*.js",
- f"{path}/*.mjs",
- f"{path}/*.sjs",
- ]
- for line in self.run(cmd):
- js = pathlib.Path(line)
- if is_excluded_from_imports(js):
- continue
- jss.append(js)
-
- return jss
-
-
-class Summary:
- def __init__(self):
- self.convert_errors = []
- self.import_errors = []
- self.rename_errors = []
- self.no_refs = []
-
-
-@Command(
- "esmify",
- category="misc",
- description="ESMify JSM files.",
-)
-@CommandArgument(
- "path",
- nargs=1,
- help="Path to the JSM file to ESMify, or the directory that contains "
- "JSM files and/or JS files that imports ESM-ified JSM.",
-)
-@CommandArgument(
- "--convert",
- action="store_true",
- help="Only perform the step 1 = convert part",
-)
-@CommandArgument(
- "--imports",
- action="store_true",
- help="Only perform the step 2 = import calls part",
-)
-@CommandArgument(
- "--prefix",
- default="",
- help="Restrict the target of import in the step 2 to ESM-ified JSM, by the "
- "prefix match for the JSM file's path. e.g. 'browser/'.",
-)
-def esmify(command_context, path=None, convert=False, imports=False, prefix=""):
- """
- This command does the following 2 steps:
- 1. Convert the JSM file specified by `path` to ESM file, or the JSM files
- inside the directory specified by `path` to ESM files, and also
- fix references in build files and test definitions
- 2. Convert import calls inside file(s) specified by `path` for ESM-ified
- files to use new APIs
-
- Example 1:
- # Convert all JSM files inside `browser/components/pagedata` directory,
- # and replace all references for ESM-ified files in the entire tree to use
- # new APIs
-
- $ ./mach esmify --convert browser/components/pagedata
- $ ./mach esmify --imports . --prefix=browser/components/pagedata
-
- Example 2:
- # Convert all JSM files inside `browser` directory, and replace all
- # references for the JSM files inside `browser` directory to use
- # new APIs
-
- $ ./mach esmify browser
- """
-
- def error(text):
- command_context.log(logging.ERROR, "esmify", {}, f"[ERROR] {text}")
-
- def warn(text):
- command_context.log(logging.WARN, "esmify", {}, f"[WARN] {text}")
-
- def info(text):
- command_context.log(logging.INFO, "esmify", {}, f"[INFO] {text}")
-
- # If no options is specified, perform both.
- if not convert and not imports:
- convert = True
- imports = True
-
- path = pathlib.Path(path[0])
-
- if not verify_path(command_context, path):
- return 1
-
- if HgUtils.is_available():
- vcs_utils = HgUtils()
- elif GitUtils.is_available():
- vcs_utils = GitUtils()
- else:
- error(
- "This script needs to be run inside mozilla-central "
- "checkout of either mercurial or git."
- )
- return 1
-
- load_exclusion_files()
-
- info("Setting up jscodeshift...")
- setup_jscodeshift()
-
- is_single_file = path.is_file()
-
- modified_files = []
- summary = Summary()
-
- if convert:
- info("Searching files to convert to ESM...")
- if is_single_file:
- jsms = [path]
- else:
- jsms = vcs_utils.find_jsms(path)
-
- info(f"Found {len(jsms)} file(s) to convert to ESM.")
-
- info("Converting to ESM...")
- jsms = convert_module(jsms, summary)
- if jsms is None:
- error("Failed to rewrite exports.")
- return 1
-
- info("Renaming...")
- esms = rename_jsms(command_context, vcs_utils, jsms, summary)
-
- modified_files += esms
-
- if imports:
- info("Searching files to rewrite imports...")
-
- if is_single_file:
- if convert:
- # Already converted above
- jss = esms
- else:
- jss = [path]
- else:
- jss = vcs_utils.find_all_jss(path)
-
- info(f"Checking {len(jss)} JS file(s). Rewriting any matching imports...")
-
- result = rewrite_imports(jss, prefix, summary)
- if result is None:
- return 1
-
- info(f"Rewritten {len(result)} file(s).")
-
- # Only modified files needs eslint fix
- modified_files += result
-
- modified_files = list(set(modified_files))
-
- info(f"Applying eslint --fix for {len(modified_files)} file(s)...")
- eslint_fix(command_context, modified_files)
-
- def print_files(f, errors):
- for [path, message] in errors:
- f(f" * {path}")
- if message:
- f(f" {message}")
-
- if len(summary.convert_errors):
- error("========")
- error("Following files are not converted into ESM due to error:")
- print_files(error, summary.convert_errors)
-
- if len(summary.import_errors):
- warn("========")
- warn("Following files are not rewritten to import ESMs due to error:")
- warn(
- "(NOTE: Errors related to 'private names' are mostly due to "
- " preprocessor macros in the file):"
- )
- print_files(warn, summary.import_errors)
-
- if len(summary.rename_errors):
- error("========")
- error("Following files are not renamed due to error:")
- print_files(error, summary.rename_errors)
-
- if len(summary.no_refs):
- warn("========")
- warn("Following files are not found in any build files.")
- warn("Please update references to those files manually:")
- print_files(warn, summary.rename_errors)
-
- return 0
-
-
-def verify_path(command_context, path):
- """Check if the path passed to the command is valid relative path."""
-
- def error(text):
- command_context.log(logging.ERROR, "esmify", {}, f"[ERROR] {text}")
-
- if not path.exists():
- error(f"{path} does not exist.")
- return False
-
- if path.is_absolute():
- error("Path must be a relative path from mozilla-central checkout.")
- return False
-
- return True
-
-
-def find_file(path, target):
- """Find `target` file in ancestor of path."""
- target_path = path.parent / target
- if not target_path.exists():
- if path.parent == path:
- return None
-
- return find_file(path.parent, target)
-
- return target_path
-
-
-def try_rename_in(command_context, path, target, jsm_name, esm_name, jsm_path):
- """Replace the occurrences of `jsm_name` with `esm_name` in `target`
- file."""
-
- def info(text):
- command_context.log(logging.INFO, "esmify", {}, f"[INFO] {text}")
-
- if type(target) is str:
- # Target is specified by filename, that may exist somewhere in
- # the jsm's directory or ancestor directories.
- target_path = find_file(path, target)
- if not target_path:
- return False
-
- # JSM should be specified with relative path in the file.
- #
- # Single moz.build or jar.mn can contain multiple files with same name.
- # Search for relative path.
- jsm_relative_path = jsm_path.relative_to(target_path.parent)
- jsm_path_str = path_sep_from_native(str(jsm_relative_path))
- else:
- # Target is specified by full path.
- target_path = target
-
- # JSM should be specified with full path in the file.
- jsm_path_str = path_sep_from_native(str(jsm_path))
-
- jsm_path_re = re.compile(r"\b" + jsm_path_str.replace(".", r"\.") + r"\b")
- jsm_name_re = re.compile(r"\b" + jsm_name.replace(".", r"\.") + r"\b")
-
- modified = False
- content = ""
- with open(target_path, "r") as f:
- for line in f:
- if jsm_path_re.search(line):
- modified = True
- line = jsm_name_re.sub(esm_name, line)
-
- content += line
-
- if modified:
- info(f" {str(target_path)}")
- info(f" {jsm_name} => {esm_name}")
- with open(target_path, "w", newline="\n") as f:
- f.write(content)
-
- return True
-
-
-def try_rename_uri_in(command_context, target, jsm_name, esm_name, jsm_uri, esm_uri):
- """Replace the occurrences of `jsm_uri` with `esm_uri` in `target` file."""
-
- def info(text):
- command_context.log(logging.INFO, "esmify", {}, f"[INFO] {text}")
-
- modified = False
- content = ""
- with open(target, "r") as f:
- for line in f:
- if jsm_uri in line:
- modified = True
- line = line.replace(jsm_uri, esm_uri)
-
- content += line
-
- if modified:
- info(f" {str(target)}")
- info(f" {jsm_name} => {esm_name}")
- with open(target, "w", newline="\n") as f:
- f.write(content)
-
- return True
-
-
-def try_rename_components_conf(command_context, path, jsm_name, esm_name):
- """Replace the occurrences of `jsm_name` with `esm_name` in components.conf
- file."""
-
- def info(text):
- command_context.log(logging.INFO, "esmify", {}, f"[INFO] {text}")
-
- target_path = find_file(path, "components.conf")
- if not target_path:
- return False
-
- # Unlike try_rename_in, components.conf contains the URL instead of
- # relative path, and also there are no known files with same name.
- # Simply replace the filename.
-
- with open(target_path, "r") as f:
- content = f.read()
-
- prop_re = re.compile(
- "[\"']jsm[\"']:(.*)" + r"\b" + jsm_name.replace(".", r"\.") + r"\b"
- )
-
- if not prop_re.search(content):
- return False
-
- info(f" {str(target_path)}")
- info(f" {jsm_name} => {esm_name}")
-
- content = prop_re.sub(r"'esModule':\1" + esm_name, content)
- with open(target_path, "w", newline="\n") as f:
- f.write(content)
-
- return True
-
-
-def esmify_name(name):
- return re.sub(r"\.(jsm|js|jsm\.js)$", ".sys.mjs", name)
-
-
-def esmify_path(jsm_path):
- jsm_name = jsm_path.name
- esm_name = re.sub(r"\.(jsm|js|jsm\.js)$", ".sys.mjs", jsm_name)
- esm_path = jsm_path.parent / esm_name
- return esm_path
-
-
-path_to_uri_map = None
-
-
-def load_path_to_uri_map():
- global path_to_uri_map
-
- if path_to_uri_map:
- return
-
- if "ESMIFY_MAP_JSON" in os.environ:
- json_map = pathlib.Path(os.environ["ESMIFY_MAP_JSON"])
- else:
- json_map = pathlib.Path(__file__).parent / "map.json"
-
- with open(json_map, "r") as f:
- uri_to_path_map = json.loads(f.read())
-
- path_to_uri_map = dict()
-
- for uri, paths in uri_to_path_map.items():
- if type(paths) is str:
- paths = [paths]
-
- for path in paths:
- path_to_uri_map[path] = uri
-
-
-def find_jsm_uri(jsm_path):
- load_path_to_uri_map()
-
- path = path_sep_from_native(jsm_path)
-
- if path in path_to_uri_map:
- return path_to_uri_map[path]
-
- return None
-
-
-def rename_single_file(command_context, vcs_utils, jsm_path, summary):
- """Rename `jsm_path` to .sys.mjs, and fix references to the file in build
- and test definitions."""
-
- def info(text):
- command_context.log(logging.INFO, "esmify", {}, f"[INFO] {text}")
-
- esm_path = esmify_path(jsm_path)
-
- jsm_name = jsm_path.name
- esm_name = esm_path.name
-
- target_files = [
- ".eslintignore",
- "moz.build",
- "jar.mn",
- "browser.toml",
- "browser-common.toml",
- "chrome.toml",
- "mochitest.toml",
- "xpcshell.toml",
- "xpcshell-child-process.toml",
- "xpcshell-common.toml",
- "xpcshell-parent-process.toml",
- pathlib.Path("tools", "lint", "eslint.yml"),
- pathlib.Path("tools", "lint", "rejected-words.yml"),
- ]
-
- info(f"{jsm_path} => {esm_path}")
-
- renamed = False
- for target in target_files:
- if try_rename_in(
- command_context, jsm_path, target, jsm_name, esm_name, jsm_path
- ):
- renamed = True
-
- if try_rename_components_conf(command_context, jsm_path, jsm_name, esm_name):
- renamed = True
-
- uri_target_files = [
- pathlib.Path(
- "browser", "base", "content", "test", "performance", "browser_startup.js"
- ),
- pathlib.Path(
- "browser",
- "base",
- "content",
- "test",
- "performance",
- "browser_startup_content.js",
- ),
- pathlib.Path(
- "browser",
- "base",
- "content",
- "test",
- "performance",
- "browser_startup_content_subframe.js",
- ),
- pathlib.Path(
- "toolkit",
- "components",
- "backgroundtasks",
- "tests",
- "browser",
- "browser_xpcom_graph_wait.js",
- ),
- ]
-
- jsm_uri = find_jsm_uri(jsm_path)
- if jsm_uri:
- esm_uri = re.sub(r"\.(jsm|js|jsm\.js)$", ".sys.mjs", jsm_uri)
-
- for target in uri_target_files:
- if try_rename_uri_in(
- command_context, target, jsm_uri, esm_uri, jsm_name, esm_name
- ):
- renamed = True
-
- if not renamed:
- summary.no_refs.append([jsm_path, None])
-
- if not esm_path.exists():
- vcs_utils.rename(jsm_path, esm_path)
- else:
- summary.rename_errors.append([jsm_path, f"{esm_path} already exists"])
-
- return esm_path
-
-
-def rename_jsms(command_context, vcs_utils, jsms, summary):
- esms = []
- for jsm in jsms:
- esm = rename_single_file(command_context, vcs_utils, jsm, summary)
- esms.append(esm)
-
- return esms
-
-
-npm_prefix = pathlib.Path("tools") / "esmify"
-path_from_npm_prefix = pathlib.Path("..") / ".."
-
-
-def setup_jscodeshift():
- """Install jscodeshift."""
- cmd = [
- sys.executable,
- "./mach",
- "npm",
- "install",
- "jscodeshift",
- "--save-dev",
- "--prefix",
- str(npm_prefix),
- ]
- subprocess.run(cmd, check=True)
-
-
-def run_npm_command(args, env, stdin):
- cmd = [
- sys.executable,
- "./mach",
- "npm",
- "run",
- ] + args
- p = subprocess.Popen(cmd, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- p.stdin.write(stdin)
- p.stdin.close()
-
- ok_files = []
- errors = []
- while True:
- line = p.stdout.readline()
- if not line:
- break
- line = line.rstrip().decode()
-
- if line.startswith(" NOC "):
- continue
-
- print(line)
-
- m = re.search(r"^ (OKK|ERR) ([^ ]+)(?: (.+))?", line)
- if not m:
- continue
-
- result = m.group(1)
- # NOTE: path is written from `tools/esmify`.
- path = pathlib.Path(m.group(2)).relative_to(path_from_npm_prefix)
- error = m.group(3)
-
- if result == "OKK":
- ok_files.append(path)
-
- if result == "ERR":
- errors.append([path, error])
-
- if p.wait() != 0:
- return [None, None]
-
- return ok_files, errors
-
-
-def convert_module(jsms, summary):
- """Replace EXPORTED_SYMBOLS with export declarations, and replace
- ChromeUtils.importESModule with static import as much as possible,
- and return the list of successfully rewritten files."""
-
- if len(jsms) == 0:
- return []
-
- env = os.environ.copy()
-
- stdin = "\n".join(map(str, paths_from_npm_prefix(jsms))).encode()
-
- ok_files, errors = run_npm_command(
- [
- "convert_module",
- "--prefix",
- str(npm_prefix),
- ],
- env=env,
- stdin=stdin,
- )
-
- if ok_files is None and errors is None:
- return None
-
- summary.convert_errors.extend(errors)
-
- return ok_files
-
-
-def rewrite_imports(jss, prefix, summary):
- """Replace import calls for JSM with import calls for ESM or static import
- for ESM."""
-
- if len(jss) == 0:
- return []
-
- env = os.environ.copy()
- env["ESMIFY_TARGET_PREFIX"] = prefix
-
- stdin = "\n".join(map(str, paths_from_npm_prefix(jss))).encode()
-
- ok_files, errors = run_npm_command(
- [
- "rewrite_imports",
- "--prefix",
- str(npm_prefix),
- ],
- env=env,
- stdin=stdin,
- )
-
- if ok_files is None and errors is None:
- return None
-
- summary.import_errors.extend(errors)
-
- return ok_files
-
-
-def paths_from_npm_prefix(paths):
- """Convert relative path from mozilla-central to relative path from
- tools/esmify."""
- return list(map(lambda path: path_from_npm_prefix / path, paths))
-
-
-def eslint_fix(command_context, files):
- """Auto format files."""
-
- def info(text):
- command_context.log(logging.INFO, "esmify", {}, f"[INFO] {text}")
-
- if len(files) == 0:
- return
-
- remaining = files[0:]
-
- # There can be too many files for single command line, perform by chunk.
- max_files = 16
- while len(remaining) > max_files:
- info(f"{len(remaining)} files remaining")
-
- chunk = remaining[0:max_files]
- remaining = remaining[max_files:]
-
- cmd = [sys.executable, "./mach", "eslint", "--fix"] + chunk
- subprocess.run(cmd, check=True)
-
- info(f"{len(remaining)} files remaining")
- chunk = remaining
- cmd = [sys.executable, "./mach", "eslint", "--fix"] + chunk
- subprocess.run(cmd, check=True)
diff --git a/tools/esmify/map.json b/tools/esmify/map.json
deleted file mode 100644
index 0185ae5401..0000000000
--- a/tools/esmify/map.json
+++ /dev/null
@@ -1,1127 +0,0 @@
-{
- "chrome://devtools-startup/content/DevToolsShim.jsm": "devtools/startup/DevToolsShim.jsm",
- "chrome://global/content/tabprompts.jsm": "toolkit/components/prompts/content/tabprompts.jsm",
- "chrome://mochikit/content/ShutdownLeaksCollector.jsm": "testing/mochitest/ShutdownLeaksCollector.jsm",
- "chrome://mochikit/content/tests/SimpleTest/StructuredLog.jsm": "testing/modules/StructuredLog.jsm",
- "chrome://mochitests/content/browser/accessible/tests/browser/Common.jsm": "accessible/tests/browser/Common.jsm",
- "chrome://mochitests/content/browser/accessible/tests/browser/Layout.jsm": "accessible/tests/browser/Layout.jsm",
- "chrome://mochitests/content/browser/devtools/client/shared/sourceeditor/test/CodeMirrorTestActors.jsm": "devtools/client/shared/sourceeditor/test/CodeMirrorTestActors.jsm",
- "chrome://mochitests/content/chrome/docshell/test/chrome/DocShellHelpers.jsm": "docshell/test/chrome/DocShellHelpers.jsm",
- "chrome://mochitests/content/chrome/dom/console/tests/console.jsm": "dom/console/tests/console.jsm",
- "chrome://mochitests/content/chrome/dom/network/tests/tcpsocket_test.jsm": "dom/network/tests/tcpsocket_test.jsm",
- "chrome://mochitests/content/chrome/dom/url/tests/file_worker_url.jsm": "dom/url/tests/file_worker_url.jsm",
- "chrome://mochitests/content/chrome/dom/url/tests/test_bug883784.jsm": "dom/url/tests/test_bug883784.jsm",
- "chrome://mochitests/content/chrome/dom/workers/test/WorkerTest.jsm": "dom/workers/test/WorkerTest.jsm",
- "chrome://pocket/content/Pocket.jsm": "browser/components/pocket/content/Pocket.jsm",
- "chrome://pocket/content/SaveToPocket.jsm": "browser/components/pocket/content/SaveToPocket.jsm",
- "chrome://pocket/content/pktApi.jsm": "browser/components/pocket/content/pktApi.jsm",
- "chrome://pocket/content/pktTelemetry.jsm": "browser/components/pocket/content/pktTelemetry.jsm",
- "chrome://remote/content/server/HTTPD.jsm": "netwerk/test/httpserver/httpd.js",
- "resource:///actors/ASRouterChild.jsm": "browser/components/newtab/actors/ASRouterChild.jsm",
- "resource:///actors/ASRouterParent.jsm": "browser/components/newtab/actors/ASRouterParent.jsm",
- "resource:///actors/AboutLoginsChild.jsm": "browser/components/aboutlogins/AboutLoginsChild.jsm",
- "resource:///actors/AboutLoginsParent.jsm": "browser/components/aboutlogins/AboutLoginsParent.jsm",
- "resource:///actors/AboutNewTabChild.jsm": "browser/actors/AboutNewTabChild.jsm",
- "resource:///actors/AboutNewTabParent.jsm": "browser/actors/AboutNewTabParent.jsm",
- "resource:///actors/AboutPocketChild.jsm": "browser/actors/AboutPocketChild.jsm",
- "resource:///actors/AboutPocketParent.jsm": "browser/actors/AboutPocketParent.jsm",
- "resource:///actors/AboutPrivateBrowsingChild.jsm": "browser/actors/AboutPrivateBrowsingChild.jsm",
- "resource:///actors/AboutPrivateBrowsingParent.jsm": "browser/actors/AboutPrivateBrowsingParent.jsm",
- "resource:///actors/AboutProtectionsChild.jsm": "browser/actors/AboutProtectionsChild.jsm",
- "resource:///actors/AboutProtectionsParent.jsm": "browser/actors/AboutProtectionsParent.jsm",
- "resource:///actors/AboutReaderChild.jsm": "browser/actors/AboutReaderChild.jsm",
- "resource:///actors/AboutReaderParent.jsm": "browser/actors/AboutReaderParent.jsm",
- "resource:///actors/AboutTabCrashedChild.jsm": "browser/actors/AboutTabCrashedChild.jsm",
- "resource:///actors/AboutTabCrashedParent.jsm": "browser/actors/AboutTabCrashedParent.jsm",
- "resource:///actors/AboutWelcomeChild.jsm": "browser/components/newtab/aboutwelcome/AboutWelcomeChild.jsm",
- "resource:///actors/AboutWelcomeParent.jsm": "browser/components/newtab/aboutwelcome/AboutWelcomeParent.jsm",
- "resource:///actors/BlockedSiteChild.jsm": "browser/actors/BlockedSiteChild.jsm",
- "resource:///actors/BlockedSiteParent.jsm": "browser/actors/BlockedSiteParent.jsm",
- "resource:///actors/BrowserProcessChild.jsm": "browser/actors/BrowserProcessChild.jsm",
- "resource:///actors/BrowserTabChild.jsm": "browser/actors/BrowserTabChild.jsm",
- "resource:///actors/BrowserTabParent.jsm": "browser/actors/BrowserTabParent.jsm",
- "resource:///actors/ClickHandlerChild.jsm": "browser/actors/ClickHandlerChild.jsm",
- "resource:///actors/ClickHandlerParent.jsm": "browser/actors/ClickHandlerParent.jsm",
- "resource:///actors/ContentDelegateChild.jsm": "mobile/android/actors/ContentDelegateChild.jsm",
- "resource:///actors/ContentDelegateParent.jsm": "mobile/android/actors/ContentDelegateParent.jsm",
- "resource:///actors/ContentSearchChild.jsm": "browser/actors/ContentSearchChild.jsm",
- "resource:///actors/ContentSearchParent.jsm": "browser/actors/ContentSearchParent.jsm",
- "resource:///actors/ContextMenuChild.jsm": "browser/actors/ContextMenuChild.jsm",
- "resource:///actors/ContextMenuParent.jsm": "browser/actors/ContextMenuParent.jsm",
- "resource:///actors/DOMFullscreenChild.jsm": "browser/actors/DOMFullscreenChild.jsm",
- "resource:///actors/DOMFullscreenParent.jsm": "browser/actors/DOMFullscreenParent.jsm",
- "resource:///actors/DecoderDoctorChild.jsm": "browser/actors/DecoderDoctorChild.jsm",
- "resource:///actors/DecoderDoctorParent.jsm": "browser/actors/DecoderDoctorParent.jsm",
- "resource:///actors/EncryptedMediaChild.jsm": "browser/actors/EncryptedMediaChild.jsm",
- "resource:///actors/EncryptedMediaParent.jsm": "browser/actors/EncryptedMediaParent.jsm",
- "resource:///actors/FormValidationChild.jsm": "browser/actors/FormValidationChild.jsm",
- "resource:///actors/FormValidationParent.jsm": "browser/actors/FormValidationParent.jsm",
- "resource:///actors/GeckoViewAutoFillChild.jsm": "mobile/android/actors/GeckoViewAutoFillChild.jsm",
- "resource:///actors/GeckoViewAutoFillParent.jsm": "mobile/android/actors/GeckoViewAutoFillParent.jsm",
- "resource:///actors/GeckoViewContentChild.jsm": "mobile/android/actors/GeckoViewContentChild.jsm",
- "resource:///actors/GeckoViewContentParent.jsm": "mobile/android/actors/GeckoViewContentParent.jsm",
- "resource:///actors/GeckoViewFormValidationChild.jsm": "mobile/android/actors/GeckoViewFormValidationChild.jsm",
- "resource:///actors/GeckoViewPermissionChild.jsm": "mobile/android/actors/GeckoViewPermissionChild.jsm",
- "resource:///actors/GeckoViewPermissionParent.jsm": "mobile/android/actors/GeckoViewPermissionParent.jsm",
- "resource:///actors/GeckoViewPermissionProcessChild.jsm": "mobile/android/actors/GeckoViewPermissionProcessChild.jsm",
- "resource:///actors/GeckoViewPermissionProcessParent.jsm": "mobile/android/actors/GeckoViewPermissionProcessParent.jsm",
- "resource:///actors/GeckoViewPromptChild.jsm": "mobile/android/actors/GeckoViewPromptChild.jsm",
- "resource:///actors/GeckoViewPrompterChild.jsm": "mobile/android/actors/GeckoViewPrompterChild.jsm",
- "resource:///actors/GeckoViewPrompterParent.jsm": "mobile/android/actors/GeckoViewPrompterParent.jsm",
- "resource:///actors/GeckoViewSettingsChild.jsm": "mobile/android/actors/GeckoViewSettingsChild.jsm",
- "resource:///actors/InteractionsChild.jsm": "browser/components/places/InteractionsChild.jsm",
- "resource:///actors/InteractionsParent.jsm": "browser/components/places/InteractionsParent.jsm",
- "resource:///actors/LightweightThemeChild.jsm": "browser/actors/LightweightThemeChild.jsm",
- "resource:///actors/LinkHandlerChild.jsm": "browser/actors/LinkHandlerChild.jsm",
- "resource:///actors/LinkHandlerParent.jsm": "browser/actors/LinkHandlerParent.jsm",
- "resource:///actors/LoadURIDelegateChild.jsm": "mobile/android/actors/LoadURIDelegateChild.jsm",
- "resource:///actors/LoadURIDelegateParent.jsm": "mobile/android/actors/LoadURIDelegateParent.jsm",
- "resource:///actors/MediaControlDelegateChild.jsm": "mobile/android/actors/MediaControlDelegateChild.jsm",
- "resource:///actors/MediaControlDelegateParent.jsm": "mobile/android/actors/MediaControlDelegateParent.jsm",
- "resource:///actors/PageDataChild.jsm": "browser/components/pagedata/PageDataChild.jsm",
- "resource:///actors/PageDataParent.jsm": "browser/components/pagedata/PageDataParent.jsm",
- "resource:///actors/PageInfoChild.jsm": "browser/actors/PageInfoChild.jsm",
- "resource:///actors/PageStyleChild.jsm": "browser/actors/PageStyleChild.jsm",
- "resource:///actors/PageStyleParent.jsm": "browser/actors/PageStyleParent.jsm",
- "resource:///actors/PluginChild.jsm": "browser/actors/PluginChild.jsm",
- "resource:///actors/PluginParent.jsm": "browser/actors/PluginParent.jsm",
- "resource:///actors/PointerLockChild.jsm": "browser/actors/PointerLockChild.jsm",
- "resource:///actors/PointerLockParent.jsm": "browser/actors/PointerLockParent.jsm",
- "resource:///actors/ProgressDelegateChild.jsm": "mobile/android/actors/ProgressDelegateChild.jsm",
- "resource:///actors/ProgressDelegateParent.jsm": "mobile/android/actors/ProgressDelegateParent.jsm",
- "resource:///actors/PromptParent.jsm": "browser/actors/PromptParent.jsm",
- "resource:///actors/RFPHelperChild.jsm": "browser/actors/RFPHelperChild.jsm",
- "resource:///actors/RFPHelperParent.jsm": "browser/actors/RFPHelperParent.jsm",
- "resource:///actors/RefreshBlockerChild.jsm": "browser/actors/RefreshBlockerChild.jsm",
- "resource:///actors/RefreshBlockerParent.jsm": "browser/actors/RefreshBlockerParent.jsm",
- "resource:///actors/ScreenshotsComponentChild.jsm": "browser/actors/ScreenshotsComponentChild.jsm",
- "resource:///actors/ScrollDelegateChild.jsm": "mobile/android/actors/ScrollDelegateChild.jsm",
- "resource:///actors/ScrollDelegateParent.jsm": "mobile/android/actors/ScrollDelegateParent.jsm",
- "resource:///actors/SearchSERPTelemetryChild.jsm": "browser/actors/SearchSERPTelemetryChild.jsm",
- "resource:///actors/SearchSERPTelemetryParent.jsm": "browser/actors/SearchSERPTelemetryParent.jsm",
- "resource:///actors/SelectionActionDelegateChild.jsm": "mobile/android/actors/SelectionActionDelegateChild.jsm",
- "resource:///actors/SelectionActionDelegateParent.jsm": "mobile/android/actors/SelectionActionDelegateParent.jsm",
- "resource:///actors/SwitchDocumentDirectionChild.jsm": "browser/actors/SwitchDocumentDirectionChild.jsm",
- "resource:///actors/WebRTCChild.jsm": "browser/actors/WebRTCChild.jsm",
- "resource:///actors/WebRTCParent.jsm": "browser/actors/WebRTCParent.jsm",
- "resource:///modules/360seMigrationUtils.jsm": "browser/components/migration/360seMigrationUtils.jsm",
- "resource:///modules/AboutDebuggingRegistration.jsm": "devtools/startup/AboutDebuggingRegistration.jsm",
- "resource:///modules/AboutDevToolsToolboxRegistration.jsm": "devtools/startup/AboutDevToolsToolboxRegistration.jsm",
- "resource:///modules/AboutNewTab.jsm": "browser/modules/AboutNewTab.jsm",
- "resource:///modules/AboutNewTabService.jsm": "browser/components/newtab/AboutNewTabService.jsm",
- "resource://gre/modules/AppUpdater.jsm": "toolkit/mozapps/update/AppUpdater.jsm",
- "resource:///modules/AsyncTabSwitcher.jsm": "browser/modules/AsyncTabSwitcher.jsm",
- "resource:///modules/AttributionCode.jsm": "browser/components/attribution/AttributionCode.jsm",
- "resource:///modules/BrowserContentHandler.jsm": "browser/components/BrowserContentHandler.jsm",
- "resource:///modules/BrowserGlue.jsm": "browser/components/BrowserGlue.jsm",
- "resource:///modules/BrowserSearchTelemetry.jsm": "browser/components/search/BrowserSearchTelemetry.jsm",
- "resource:///modules/BrowserUIUtils.jsm": "browser/modules/BrowserUIUtils.jsm",
- "resource:///modules/BrowserWindowTracker.jsm": "browser/modules/BrowserWindowTracker.jsm",
- "resource:///modules/BuiltInThemeConfig.jsm": "browser/themes/BuiltInThemeConfig.jsm",
- "resource:///modules/BuiltInThemes.jsm": "browser/themes/BuiltInThemes.jsm",
- "resource:///modules/CaptiveDetect.jsm": "toolkit/components/captivedetect/CaptiveDetect.jsm",
- "resource:///modules/ChromeMacOSLoginCrypto.jsm": "browser/components/migration/ChromeMacOSLoginCrypto.jsm",
- "resource:///modules/ChromeMigrationUtils.jsm": "browser/components/migration/ChromeMigrationUtils.jsm",
- "resource:///modules/ChromeProfileMigrator.jsm": "browser/components/migration/ChromeProfileMigrator.jsm",
- "resource:///modules/ChromeWindowsLoginCrypto.jsm": "browser/components/migration/ChromeWindowsLoginCrypto.jsm",
- "resource:///modules/CommonNames.jsm": "browser/components/places/CommonNames.jsm",
- "resource:///modules/ContentCrashHandlers.jsm": "browser/modules/ContentCrashHandlers.jsm",
- "resource:///modules/CustomizableUI.jsm": "browser/components/customizableui/CustomizableUI.jsm",
- "resource:///modules/CustomizableWidgets.jsm": "browser/components/customizableui/CustomizableWidgets.jsm",
- "resource:///modules/CustomizeMode.jsm": "browser/components/customizableui/CustomizeMode.jsm",
- "resource:///modules/DevToolsStartup.jsm": "devtools/startup/DevToolsStartup.jsm",
- "resource:///modules/Discovery.jsm": "browser/modules/Discovery.jsm",
- "resource:///modules/DoHConfig.jsm": "browser/components/doh/DoHConfig.jsm",
- "resource:///modules/DoHController.jsm": "browser/components/doh/DoHController.jsm",
- "resource:///modules/DoHHeuristics.jsm": "browser/components/doh/DoHHeuristics.jsm",
- "resource:///modules/DomainGroupBuilder.jsm": "browser/components/places/DomainGroupBuilder.jsm",
- "resource:///modules/DownloadSpamProtection.jsm": "browser/components/downloads/DownloadSpamProtection.jsm",
- "resource:///modules/DownloadsCommon.jsm": "browser/components/downloads/DownloadsCommon.jsm",
- "resource:///modules/DownloadsMacFinderProgress.jsm": "browser/components/downloads/DownloadsMacFinderProgress.jsm",
- "resource:///modules/DownloadsTaskbar.jsm": "browser/components/downloads/DownloadsTaskbar.jsm",
- "resource:///modules/DownloadsViewUI.jsm": "browser/components/downloads/DownloadsViewUI.jsm",
- "resource:///modules/DownloadsViewableInternally.jsm": "browser/components/downloads/DownloadsViewableInternally.jsm",
- "resource:///modules/DragPositionManager.jsm": "browser/components/customizableui/DragPositionManager.jsm",
- "resource:///modules/ESEDBReader.jsm": "browser/components/migration/ESEDBReader.jsm",
- "resource:///modules/EdgeProfileMigrator.jsm": "browser/components/migration/EdgeProfileMigrator.jsm",
- "resource:///modules/EveryWindow.jsm": "browser/modules/EveryWindow.jsm",
- "resource:///modules/ExtensionControlledPopup.jsm": "browser/components/extensions/ExtensionControlledPopup.jsm",
- "resource:///modules/ExtensionPopups.jsm": "browser/components/extensions/ExtensionPopups.jsm",
- "resource:///modules/ExtensionsUI.jsm": "browser/modules/ExtensionsUI.jsm",
- "resource:///modules/FaviconLoader.jsm": "browser/modules/FaviconLoader.jsm",
- "resource:///modules/FirefoxProfileMigrator.jsm": "browser/components/migration/FirefoxProfileMigrator.jsm",
- "resource:///modules/HeadlessShell.jsm": "browser/components/shell/HeadlessShell.jsm",
- "resource:///modules/HomePage.jsm": "browser/modules/HomePage.jsm",
- "resource:///modules/IEProfileMigrator.jsm": "browser/components/migration/IEProfileMigrator.jsm",
- "resource:///modules/InstallerPrefs.jsm": "browser/components/installerprefs/InstallerPrefs.jsm",
- "resource:///modules/Interactions.jsm": "browser/components/places/Interactions.jsm",
- "resource:///modules/InteractionsBlocklist.jsm": "browser/components/places/InteractionsBlocklist.jsm",
- "resource:///modules/LaterRun.jsm": "browser/modules/LaterRun.jsm",
- "resource:///modules/LoginBreaches.jsm": "browser/components/aboutlogins/LoginBreaches.jsm",
- "resource:///modules/MSMigrationUtils.jsm": "browser/components/migration/MSMigrationUtils.jsm",
- "resource:///modules/MacAttribution.jsm": "browser/components/attribution/MacAttribution.jsm",
- "resource:///modules/MacTouchBar.jsm": "browser/components/touchbar/MacTouchBar.jsm",
- "resource:///modules/MigrationUtils.jsm": "browser/components/migration/MigrationUtils.jsm",
- "resource:///modules/NewTabPagePreloading.jsm": "browser/modules/NewTabPagePreloading.jsm",
- "resource:///modules/OpenInTabsUtils.jsm": "browser/modules/OpenInTabsUtils.jsm",
- "resource:///modules/PageActions.jsm": "browser/modules/PageActions.jsm",
- "resource:///modules/PanelMultiView.jsm": "browser/components/customizableui/PanelMultiView.jsm",
- "resource:///modules/PartnerLinkAttribution.jsm": "browser/modules/PartnerLinkAttribution.jsm",
- "resource:///modules/PinnedGroupBuilder.jsm": "browser/components/places/PinnedGroupBuilder.jsm",
- "resource:///modules/PlacesUIUtils.jsm": "browser/components/places/PlacesUIUtils.jsm",
- "resource:///modules/ProcessHangMonitor.jsm": "browser/modules/ProcessHangMonitor.jsm",
- "resource:///modules/ProfileMigrator.jsm": "browser/components/migration/ProfileMigrator.jsm",
- "resource:///modules/PromptCollection.jsm": "browser/components/prompts/PromptCollection.jsm",
- "resource:///modules/SafariProfileMigrator.jsm": "browser/components/migration/SafariProfileMigrator.jsm",
- "resource:///modules/Sanitizer.jsm": "browser/modules/Sanitizer.jsm",
- "resource:///modules/ScreenshotChild.jsm": "browser/components/shell/ScreenshotChild.jsm",
- "resource:///modules/ScreenshotsOverlayChild.jsm": "browser/components/screenshots/ScreenshotsOverlayChild.jsm",
- "resource:///modules/ScreenshotsUtils.jsm": "browser/components/screenshots/ScreenshotsUtils.jsm",
- "resource:///modules/SearchOneOffs.jsm": "browser/components/search/SearchOneOffs.jsm",
- "resource:///modules/SearchSERPTelemetry.jsm": "browser/components/search/SearchSERPTelemetry.jsm",
- "resource:///modules/SearchUIUtils.jsm": "browser/components/search/SearchUIUtils.jsm",
- "resource:///modules/SearchWidgetTracker.jsm": "browser/components/customizableui/SearchWidgetTracker.jsm",
- "resource:///modules/SelectionChangedMenulist.jsm": "browser/modules/SelectionChangedMenulist.jsm",
- "resource:///modules/ShellService.jsm": "browser/components/shell/ShellService.jsm",
- "resource:///modules/SiteDataManager.jsm": "browser/modules/SiteDataManager.jsm",
- "resource:///modules/SitePermissions.jsm": "browser/modules/SitePermissions.jsm",
- "resource:///modules/SnapshotGroups.jsm": "browser/components/places/SnapshotGroups.jsm",
- "resource:///modules/SnapshotMonitor.jsm": "browser/components/places/SnapshotMonitor.jsm",
- "resource:///modules/SnapshotScorer.jsm": "browser/components/places/SnapshotScorer.jsm",
- "resource:///modules/SnapshotSelector.jsm": "browser/components/places/SnapshotSelector.jsm",
- "resource:///modules/Snapshots.jsm": "browser/components/places/Snapshots.jsm",
- "resource:///modules/StartupRecorder.jsm": "browser/components/StartupRecorder.jsm",
- "resource:///modules/TRRPerformance.jsm": "browser/components/doh/TRRPerformance.jsm",
- "resource:///modules/TabUnloader.jsm": "browser/modules/TabUnloader.jsm",
- "resource:///modules/TabsList.jsm": "browser/modules/TabsList.jsm",
- "resource:///modules/ThemeVariableMap.jsm": "browser/themes/ThemeVariableMap.jsm",
- "resource:///modules/TransientPrefs.jsm": "browser/modules/TransientPrefs.jsm",
- "resource:///modules/UITour.jsm": "browser/components/uitour/UITour.jsm",
- "resource:///modules/UITourChild.jsm": "browser/components/uitour/UITourChild.jsm",
- "resource:///modules/UITourParent.jsm": "browser/components/uitour/UITourParent.jsm",
- "resource:///modules/UnitConverterSimple.jsm": "browser/components/urlbar/unitconverters/UnitConverterSimple.jsm",
- "resource:///modules/UnitConverterTemperature.jsm": "browser/components/urlbar/unitconverters/UnitConverterTemperature.jsm",
- "resource:///modules/UnitConverterTimezone.jsm": "browser/components/urlbar/unitconverters/UnitConverterTimezone.jsm",
- "resource:///modules/UrlbarController.jsm": "browser/components/urlbar/UrlbarController.jsm",
- "resource:///modules/UrlbarEventBufferer.jsm": "browser/components/urlbar/UrlbarEventBufferer.jsm",
- "resource:///modules/UrlbarInput.jsm": "browser/components/urlbar/UrlbarInput.jsm",
- "resource:///modules/UrlbarMuxerUnifiedComplete.jsm": "browser/components/urlbar/UrlbarMuxerUnifiedComplete.jsm",
- "resource:///modules/UrlbarPrefs.jsm": "browser/components/urlbar/UrlbarPrefs.jsm",
- "resource:///modules/UrlbarProviderAboutPages.jsm": "browser/components/urlbar/UrlbarProviderAboutPages.jsm",
- "resource:///modules/UrlbarProviderAliasEngines.jsm": "browser/components/urlbar/UrlbarProviderAliasEngines.jsm",
- "resource:///modules/UrlbarProviderAutofill.jsm": "browser/components/urlbar/UrlbarProviderAutofill.jsm",
- "resource:///modules/UrlbarProviderBookmarkKeywords.jsm": "browser/components/urlbar/UrlbarProviderBookmarkKeywords.jsm",
- "resource:///modules/UrlbarProviderCalculator.jsm": "browser/components/urlbar/UrlbarProviderCalculator.jsm",
- "resource:///modules/UrlbarProviderExtension.jsm": "browser/components/urlbar/UrlbarProviderExtension.jsm",
- "resource:///modules/UrlbarProviderHeuristicFallback.jsm": "browser/components/urlbar/UrlbarProviderHeuristicFallback.jsm",
- "resource:///modules/UrlbarProviderInputHistory.jsm": "browser/components/urlbar/UrlbarProviderInputHistory.jsm",
- "resource:///modules/UrlbarProviderInterventions.jsm": "browser/components/urlbar/UrlbarProviderInterventions.jsm",
- "resource:///modules/UrlbarProviderOmnibox.jsm": "browser/components/urlbar/UrlbarProviderOmnibox.jsm",
- "resource:///modules/UrlbarProviderOpenTabs.jsm": "browser/components/urlbar/UrlbarProviderOpenTabs.jsm",
- "resource:///modules/UrlbarProviderPlaces.jsm": "browser/components/urlbar/UrlbarProviderPlaces.jsm",
- "resource:///modules/UrlbarProviderPrivateSearch.jsm": "browser/components/urlbar/UrlbarProviderPrivateSearch.jsm",
- "resource:///modules/UrlbarProviderQuickSuggest.jsm": "browser/components/urlbar/UrlbarProviderQuickSuggest.jsm",
- "resource:///modules/UrlbarProviderRemoteTabs.jsm": "browser/components/urlbar/UrlbarProviderRemoteTabs.jsm",
- "resource:///modules/UrlbarProviderSearchSuggestions.jsm": "browser/components/urlbar/UrlbarProviderSearchSuggestions.jsm",
- "resource:///modules/UrlbarProviderSearchTips.jsm": "browser/components/urlbar/UrlbarProviderSearchTips.jsm",
- "resource:///modules/UrlbarProviderTabToSearch.jsm": "browser/components/urlbar/UrlbarProviderTabToSearch.jsm",
- "resource:///modules/UrlbarProviderTokenAliasEngines.jsm": "browser/components/urlbar/UrlbarProviderTokenAliasEngines.jsm",
- "resource:///modules/UrlbarProviderTopSites.jsm": "browser/components/urlbar/UrlbarProviderTopSites.jsm",
- "resource:///modules/UrlbarProviderUnitConversion.jsm": "browser/components/urlbar/UrlbarProviderUnitConversion.jsm",
- "resource:///modules/UrlbarProvidersManager.jsm": "browser/components/urlbar/UrlbarProvidersManager.jsm",
- "resource:///modules/UrlbarResult.jsm": "browser/components/urlbar/UrlbarResult.jsm",
- "resource:///modules/UrlbarSearchOneOffs.jsm": "browser/components/urlbar/UrlbarSearchOneOffs.jsm",
- "resource:///modules/UrlbarSearchUtils.jsm": "browser/components/urlbar/UrlbarSearchUtils.jsm",
- "resource:///modules/UrlbarTokenizer.jsm": "browser/components/urlbar/UrlbarTokenizer.jsm",
- "resource:///modules/UrlbarUtils.jsm": "browser/components/urlbar/UrlbarUtils.jsm",
- "resource:///modules/UrlbarValueFormatter.jsm": "browser/components/urlbar/UrlbarValueFormatter.jsm",
- "resource:///modules/UrlbarView.jsm": "browser/components/urlbar/UrlbarView.jsm",
- "resource:///modules/WebProtocolHandlerRegistrar.jsm": "browser/components/protocolhandler/WebProtocolHandlerRegistrar.jsm",
- "resource:///modules/WindowsJumpLists.jsm": "browser/modules/WindowsJumpLists.jsm",
- "resource:///modules/WindowsPreviewPerTab.jsm": "browser/modules/WindowsPreviewPerTab.jsm",
- "resource:///modules/ZoomUI.jsm": "browser/modules/ZoomUI.jsm",
- "resource:///modules/asrouter/ASRouter.jsm": "browser/components/asrouter/modules/ASRouter.jsm",
- "resource:///modules/asrouter/ASRouterDefaultConfig.jsm": "browser/components/asrouter/modules/ASRouterDefaultConfig.jsm",
- "resource:///modules/asrouter/ASRouterParentProcessMessageHandler.jsm": "browser/components/asrouter/modules/ASRouterParentProcessMessageHandler.jsm",
- "resource:///modules/asrouter/ASRouterPreferences.jsm": "browser/components/asrouter/modules/ASRouterPreferences.jsm",
- "resource:///modules/asrouter/ASRouterTargeting.jsm": "browser/components/asrouter/modules/ASRouterTargeting.jsm",
- "resource:///modules/asrouter/ASRouterTriggerListeners.jsm": "browser/components/asrouter/modules/ASRouterTriggerListeners.jsm",
- "resource:///modules/asrouter/CFRPageActions.jsm": "browser/components/asrouter/modules/CFRPageActions.jsm",
- "resource:///modules/asrouter/InfoBar.jsm": "browser/components/asrouter/modules/InfoBar.jsm",
- "resource:///modules/asrouter/MomentsPageHub.jsm": "browser/components/asrouter/modules/MomentsPageHub.jsm",
- "resource:///modules/asrouter/OnboardingMessageProvider.jsm": "browser/components/asrouter/modules/OnboardingMessageProvider.jsm",
- "resource:///modules/asrouter/ToolbarBadgeHub.jsm": "browser/components/asrouter/modules/ToolbarBadgeHub.jsm",
- "resource:///modules/asrouter/ToolbarPanelHub.jsm": "browser/components/asrouter/modules/ToolbarPanelHub.jsm",
- "resource:///modules/distribution.js": "browser/components/distribution.js",
- "resource:///modules/pagedata/OpenGraphPageData.jsm": "browser/components/pagedata/OpenGraphPageData.jsm",
- "resource:///modules/pagedata/PageDataSchema.jsm": "browser/components/pagedata/PageDataSchema.jsm",
- "resource:///modules/pagedata/PageDataService.jsm": "browser/components/pagedata/PageDataService.jsm",
- "resource:///modules/pagedata/SchemaOrgPageData.jsm": "browser/components/pagedata/SchemaOrgPageData.jsm",
- "resource:///modules/pagedata/TwitterPageData.jsm": "browser/components/pagedata/TwitterPageData.jsm",
- "resource:///modules/policies/BookmarksPolicies.jsm": "browser/components/enterprisepolicies/helpers/BookmarksPolicies.jsm",
- "resource:///modules/policies/Policies.jsm": "browser/components/enterprisepolicies/Policies.jsm",
- "resource:///modules/policies/ProxyPolicies.jsm": "browser/components/enterprisepolicies/helpers/ProxyPolicies.jsm",
- "resource:///modules/policies/WebsiteFilter.jsm": "browser/components/enterprisepolicies/helpers/WebsiteFilter.jsm",
- "resource:///modules/policies/schema.jsm": "browser/components/enterprisepolicies/schemas/schema.jsm",
- "resource:///modules/sessionstore/GlobalState.jsm": "browser/components/sessionstore/GlobalState.jsm",
- "resource:///modules/sessionstore/RecentlyClosedTabsAndWindowsMenuUtils.jsm": "browser/components/sessionstore/RecentlyClosedTabsAndWindowsMenuUtils.jsm",
- "resource:///modules/sessionstore/RunState.jsm": "browser/components/sessionstore/RunState.jsm",
- "resource:///modules/sessionstore/SessionCookies.jsm": "browser/components/sessionstore/SessionCookies.jsm",
- "resource:///modules/sessionstore/SessionFile.jsm": "browser/components/sessionstore/SessionFile.jsm",
- "resource:///modules/sessionstore/SessionMigration.jsm": "browser/components/sessionstore/SessionMigration.jsm",
- "resource:///modules/sessionstore/SessionSaver.jsm": "browser/components/sessionstore/SessionSaver.jsm",
- "resource:///modules/sessionstore/SessionStartup.jsm": "browser/components/sessionstore/SessionStartup.jsm",
- "resource:///modules/sessionstore/SessionStore.jsm": "browser/components/sessionstore/SessionStore.jsm",
- "resource:///modules/sessionstore/SessionWriter.jsm": "browser/components/sessionstore/SessionWriter.jsm",
- "resource:///modules/sessionstore/StartupPerformance.jsm": "browser/components/sessionstore/StartupPerformance.jsm",
- "resource:///modules/sessionstore/TabAttributes.jsm": "browser/components/sessionstore/TabAttributes.jsm",
- "resource:///modules/sessionstore/TabState.jsm": "browser/components/sessionstore/TabState.jsm",
- "resource:///modules/sessionstore/TabStateCache.jsm": "browser/components/sessionstore/TabStateCache.jsm",
- "resource:///modules/sessionstore/TabStateFlusher.jsm": "browser/components/sessionstore/TabStateFlusher.jsm",
- "resource:///modules/syncedtabs/EventEmitter.jsm": "browser/components/syncedtabs/EventEmitter.jsm",
- "resource:///modules/syncedtabs/SyncedTabsDeckComponent.js": "browser/components/syncedtabs/SyncedTabsDeckComponent.js",
- "resource:///modules/syncedtabs/SyncedTabsDeckStore.js": "browser/components/syncedtabs/SyncedTabsDeckStore.js",
- "resource:///modules/syncedtabs/SyncedTabsDeckView.js": "browser/components/syncedtabs/SyncedTabsDeckView.js",
- "resource:///modules/syncedtabs/SyncedTabsListStore.js": "browser/components/syncedtabs/SyncedTabsListStore.js",
- "resource:///modules/syncedtabs/TabListComponent.js": "browser/components/syncedtabs/TabListComponent.js",
- "resource:///modules/syncedtabs/TabListView.js": "browser/components/syncedtabs/TabListView.js",
- "resource:///modules/syncedtabs/util.js": "browser/components/syncedtabs/util.js",
- "resource:///modules/webrtcUI.jsm": "browser/modules/webrtcUI.jsm",
- "resource://activity-stream/aboutwelcome/lib/AboutWelcomeDefaults.jsm": "browser/components/newtab/aboutwelcome/lib/AboutWelcomeDefaults.jsm",
- "resource://activity-stream/aboutwelcome/lib/AboutWelcomeTelemetry.jsm": "browser/components/newtab/aboutwelcome/lib/AboutWelcomeTelemetry.jsm",
- "resource://activity-stream/common/Actions.jsm": "browser/components/newtab/common/Actions.jsm",
- "resource://activity-stream/common/ActorConstants.jsm": "browser/components/newtab/common/ActorConstants.jsm",
- "resource://activity-stream/common/Dedupe.jsm": "browser/components/newtab/common/Dedupe.jsm",
- "resource://activity-stream/common/Reducers.jsm": "browser/components/newtab/common/Reducers.jsm",
- "resource://activity-stream/lib/ASRouterNewTabHook.jsm": "browser/components/newtab/lib/ASRouterNewTabHook.jsm",
- "resource://activity-stream/lib/AboutPreferences.jsm": "browser/components/newtab/lib/AboutPreferences.jsm",
- "resource://activity-stream/lib/ActivityStream.jsm": "browser/components/newtab/lib/ActivityStream.jsm",
- "resource://activity-stream/lib/ActivityStreamMessageChannel.jsm": "browser/components/newtab/lib/ActivityStreamMessageChannel.jsm",
- "resource://activity-stream/lib/ActivityStreamStorage.jsm": "browser/components/newtab/lib/ActivityStreamStorage.jsm",
- "resource://activity-stream/lib/CFRMessageProvider.jsm": "browser/components/newtab/lib/CFRMessageProvider.jsm",
- "resource://activity-stream/lib/DefaultSites.jsm": "browser/components/newtab/lib/DefaultSites.jsm",
- "resource://activity-stream/lib/DiscoveryStreamFeed.jsm": "browser/components/newtab/lib/DiscoveryStreamFeed.jsm",
- "resource://activity-stream/lib/DownloadsManager.jsm": "browser/components/newtab/lib/DownloadsManager.jsm",
- "resource://activity-stream/lib/FaviconFeed.jsm": "browser/components/newtab/lib/FaviconFeed.jsm",
- "resource://activity-stream/lib/FeatureCalloutMessages.jsm": "browser/components/newtab/lib/FeatureCalloutMessages.jsm",
- "resource://activity-stream/lib/FilterAdult.jsm": "browser/components/newtab/lib/FilterAdult.jsm",
- "resource://activity-stream/lib/LinksCache.jsm": "browser/components/newtab/lib/LinksCache.jsm",
- "resource://activity-stream/lib/NewTabInit.jsm": "browser/components/newtab/lib/NewTabInit.jsm",
- "resource://activity-stream/lib/PanelTestProvider.jsm": "browser/components/newtab/lib/PanelTestProvider.jsm",
- "resource://activity-stream/lib/PersistentCache.jsm": "browser/components/newtab/lib/PersistentCache.jsm",
- "resource://activity-stream/lib/PersonalityProvider/NaiveBayesTextTagger.jsm": "browser/components/newtab/lib/PersonalityProvider/NaiveBayesTextTagger.jsm",
- "resource://activity-stream/lib/PersonalityProvider/NmfTextTagger.jsm": "browser/components/newtab/lib/PersonalityProvider/NmfTextTagger.jsm",
- "resource://activity-stream/lib/PersonalityProvider/PersonalityProvider.jsm": "browser/components/newtab/lib/PersonalityProvider/PersonalityProvider.jsm",
- "resource://activity-stream/lib/PersonalityProvider/PersonalityProviderWorkerClass.jsm": "browser/components/newtab/lib/PersonalityProvider/PersonalityProviderWorkerClass.jsm",
- "resource://activity-stream/lib/PersonalityProvider/RecipeExecutor.jsm": "browser/components/newtab/lib/PersonalityProvider/RecipeExecutor.jsm",
- "resource://activity-stream/lib/PersonalityProvider/Tokenize.jsm": "browser/components/newtab/lib/PersonalityProvider/Tokenize.jsm",
- "resource://activity-stream/lib/PlacesFeed.jsm": "browser/components/newtab/lib/PlacesFeed.jsm",
- "resource://activity-stream/lib/PrefsFeed.jsm": "browser/components/newtab/lib/PrefsFeed.jsm",
- "resource://activity-stream/lib/RecommendationProvider.jsm": "browser/components/newtab/lib/RecommendationProvider.jsm",
- "resource://activity-stream/lib/RemoteL10n.jsm": "browser/components/newtab/lib/RemoteL10n.jsm",
- "resource://activity-stream/lib/Screenshots.jsm": "browser/components/newtab/lib/Screenshots.jsm",
- "resource://activity-stream/lib/SearchShortcuts.jsm": "browser/components/newtab/lib/SearchShortcuts.jsm",
- "resource://activity-stream/lib/SectionsManager.jsm": "browser/components/newtab/lib/SectionsManager.jsm",
- "resource://activity-stream/lib/ShortURL.jsm": "browser/components/newtab/lib/ShortURL.jsm",
- "resource://activity-stream/lib/SiteClassifier.jsm": "browser/components/newtab/lib/SiteClassifier.jsm",
- "resource://activity-stream/lib/Spotlight.jsm": "browser/components/newtab/lib/Spotlight.jsm",
- "resource://activity-stream/lib/Store.jsm": "browser/components/newtab/lib/Store.jsm",
- "resource://activity-stream/lib/SystemTickFeed.jsm": "browser/components/newtab/lib/SystemTickFeed.jsm",
- "resource://activity-stream/lib/TippyTopProvider.jsm": "browser/components/newtab/lib/TippyTopProvider.jsm",
- "resource://activity-stream/lib/ToastNotification.jsm": "browser/components/newtab/lib/ToastNotification.jsm",
- "resource://activity-stream/lib/TopSitesFeed.jsm": "browser/components/newtab/lib/TopSitesFeed.jsm",
- "resource://activity-stream/lib/TopStoriesFeed.jsm": "browser/components/newtab/lib/TopStoriesFeed.jsm",
- "resource://activity-stream/lib/UTEventReporting.jsm": "browser/components/newtab/lib/UTEventReporting.jsm",
- "resource://android/assets/web_extensions/test-support/TestSupportChild.jsm": "mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/TestSupportChild.jsm",
- "resource://android/assets/web_extensions/test-support/TestSupportProcessChild.jsm": "mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/TestSupportProcessChild.jsm",
- "resource://app/modules/SnapshotSelector.jsm": "browser/components/places/SnapshotSelector.jsm",
- "resource://autofill/AutofillTelemetry.jsm": "toolkit/components/formautofill/AutofillTelemetry.jsm",
- "resource://autofill/CreditCardRuleset.jsm": "toolkit/components/formautofill/CreditCardRuleset.jsm",
- "resource://autofill/FormAutofill.jsm": "toolkit/components/formautofill/FormAutofill.jsm",
- "resource://autofill/FormAutofillChild.jsm": "toolkit/components/formautofill/FormAutofillChild.jsm",
- "resource://autofill/FormAutofillContent.jsm": "toolkit/components/formautofill/FormAutofillContent.jsm",
- "resource://autofill/FormAutofillHandler.jsm": "toolkit/components/formautofill/FormAutofillHandler.jsm",
- "resource://autofill/FormAutofillHeuristics.jsm": "toolkit/components/formautofill/FormAutofillHeuristics.jsm",
- "resource://autofill/FormAutofillNameUtils.jsm": "toolkit/components/formautofill/FormAutofillNameUtils.jsm",
- "resource://autofill/FormAutofillParent.jsm": "toolkit/components/formautofill/FormAutofillParent.jsm",
- "resource://autofill/FormAutofillPreferences.jsm": "toolkit/components/formautofill/FormAutofillPreferences.jsm",
- "resource://autofill/FormAutofillStorageBase.jsm": "toolkit/components/formautofill/FormAutofillStorageBase.jsm",
- "resource://autofill/FormAutofillSync.jsm": "toolkit/components/formautofill/FormAutofillSync.jsm",
- "resource://autofill/Autofilltelemetry.jsm": "toolkit/components/formautofill/Autofilltelemetry.jsm",
- "resource://autofill/FormAutofillUtils.jsm": "toolkit/components/formautofill/FormAutofillUtils.jsm",
- "resource://autofill/ProfileAutoCompleteResult.jsm": "toolkit/components/formautofill/ProfileAutoCompleteResult.jsm",
- "resource://autofill/phonenumberutils/PhoneNumber.jsm": "toolkit/components/formautofill/phonenumberutils/PhoneNumber.jsm",
- "resource://autofill/phonenumberutils/PhoneNumberMetaData.jsm": "toolkit/components/formautofill/phonenumberutils/PhoneNumberMetaData.jsm",
- "resource://autofill/phonenumberutils/PhoneNumberNormalizer.jsm": "toolkit/components/formautofill/phonenumberutils/PhoneNumberNormalizer.jsm",
- "resource://damp-test/content/actors/DampLoadChild.jsm": "testing/talos/talos/tests/devtools/addon/content/actors/DampLoadChild.jsm",
- "resource://damp-test/content/actors/DampLoadParent.jsm": "testing/talos/talos/tests/devtools/addon/content/actors/DampLoadParent.jsm",
- "resource://devtools/client/framework/browser-toolbox/Launcher.jsm": "devtools/client/framework/browser-toolbox/Launcher.jsm",
- "resource://devtools/client/jsonview/Converter.jsm": "devtools/client/jsonview/Converter.jsm",
- "resource://devtools/client/jsonview/Sniffer.jsm": "devtools/client/jsonview/Sniffer.jsm",
- "resource://devtools/client/performance-new/shared/background.jsm.js": "devtools/client/performance-new/shared/background.jsm.js",
- "resource://devtools/client/performance-new/popup/menu-button.jsm.js": "devtools/client/performance-new/popup/menu-button.jsm.js",
- "resource://devtools/client/performance-new/popup/logic.jsm.js": "devtools/client/performance-new/popup/logic.jsm.js",
- "resource://devtools/client/performance-new/shared/symbolication.jsm.js": "devtools/client/performance-new/shared/symbolication.jsm.js",
- "resource://devtools/client/performance-new/shared/typescript-lazy-load.jsm.js": "devtools/client/performance-new/shared/typescript-lazy-load.jsm.js",
- "resource://devtools/client/storage/VariablesView.jsm": "devtools/client/storage/VariablesView.jsm",
- "resource://devtools/client/styleeditor/StyleEditorUI.jsm": "devtools/client/styleeditor/StyleEditorUI.jsm",
- "resource://devtools/client/styleeditor/StyleEditorUtil.jsm": "devtools/client/styleeditor/StyleEditorUtil.jsm",
- "resource://devtools/client/styleeditor/StyleSheetEditor.jsm": "devtools/client/styleeditor/StyleSheetEditor.jsm",
- "resource://devtools/server/actors/targets/target-actor-registry.jsm": "devtools/server/actors/targets/target-actor-registry.jsm",
- "resource://devtools/server/actors/watcher/SessionDataHelpers.jsm": "devtools/server/actors/watcher/SessionDataHelpers.jsm",
- "resource://devtools/server/actors/watcher/WatcherRegistry.jsm": "devtools/server/actors/watcher/WatcherRegistry.jsm",
- "resource://devtools/server/actors/watcher/browsing-context-helpers.jsm": "devtools/server/actors/watcher/browsing-context-helpers.jsm",
- "resource://devtools/server/connectors/js-window-actor/DevToolsFrameChild.jsm": "devtools/server/connectors/js-window-actor/DevToolsFrameChild.jsm",
- "resource://devtools/server/connectors/js-window-actor/DevToolsFrameParent.jsm": "devtools/server/connectors/js-window-actor/DevToolsFrameParent.jsm",
- "resource://devtools/server/connectors/js-window-actor/DevToolsWorkerChild.jsm": "devtools/server/connectors/js-window-actor/DevToolsWorkerChild.jsm",
- "resource://devtools/server/connectors/js-window-actor/DevToolsWorkerParent.jsm": "devtools/server/connectors/js-window-actor/DevToolsWorkerParent.jsm",
- "resource://devtools/server/connectors/js-window-actor/WindowGlobalLogger.jsm": "devtools/server/connectors/js-window-actor/WindowGlobalLogger.jsm",
- "resource://devtools/server/startup/content-process.jsm": "devtools/server/startup/content-process.jsm",
- "resource://devtools/shared/loader/Loader.jsm": "devtools/shared/loader/Loader.jsm",
- "resource://devtools/shared/loader/base-loader.js": "devtools/shared/loader/base-loader.js",
- "resource://devtools/shared/loader/browser-loader.js": "devtools/shared/loader/browser-loader.js",
- "resource://devtools/shared/loader/loader-plugin-raw.jsm": "devtools/shared/loader/loader-plugin-raw.jsm",
- "resource://devtools/shared/loader/worker-loader.js": "devtools/shared/loader/worker-loader.js",
- "resource://devtools/shared/security/DevToolsSocketStatus.jsm": "devtools/shared/security/DevToolsSocketStatus.jsm",
- "resource://devtools/shared/test-helpers/tracked-objects.jsm": "devtools/shared/test-helpers/tracked-objects.jsm",
- "resource://devtools/shared/validate-breakpoint.jsm": "devtools/shared/validate-breakpoint.jsm",
- "resource://devtools/shared/worker/worker.js": "devtools/shared/worker/worker.js",
- "resource://featuregates/FeatureGate.jsm": "toolkit/components/featuregates/FeatureGate.jsm",
- "resource://featuregates/FeatureGateImplementation.jsm": "toolkit/components/featuregates/FeatureGateImplementation.jsm",
- "resource://gre/actors/AboutHttpsOnlyErrorChild.jsm": "toolkit/actors/AboutHttpsOnlyErrorChild.jsm",
- "resource://gre/actors/AboutHttpsOnlyErrorParent.jsm": "toolkit/actors/AboutHttpsOnlyErrorParent.jsm",
- "resource://gre/actors/AudioPlaybackChild.jsm": "toolkit/actors/AudioPlaybackChild.jsm",
- "resource://gre/actors/AudioPlaybackParent.jsm": "toolkit/actors/AudioPlaybackParent.jsm",
- "resource://gre/actors/AutoCompleteChild.jsm": "toolkit/actors/AutoCompleteChild.jsm",
- "resource://gre/actors/AutoCompleteParent.jsm": "toolkit/actors/AutoCompleteParent.jsm",
- "resource://gre/actors/AutoScrollChild.jsm": "toolkit/actors/AutoScrollChild.jsm",
- "resource://gre/actors/AutoScrollParent.jsm": "toolkit/actors/AutoScrollParent.jsm",
- "resource://gre/actors/AutoplayChild.jsm": "toolkit/actors/AutoplayChild.jsm",
- "resource://gre/actors/AutoplayParent.jsm": "toolkit/actors/AutoplayParent.jsm",
- "resource://gre/actors/BackgroundThumbnailsChild.jsm": "toolkit/actors/BackgroundThumbnailsChild.jsm",
- "resource://gre/actors/BrowserElementChild.jsm": "toolkit/actors/BrowserElementChild.jsm",
- "resource://gre/actors/BrowserElementParent.jsm": "toolkit/actors/BrowserElementParent.jsm",
- "resource://gre/actors/ClipboardReadPasteChild.jsm": "toolkit/actors/ClipboardReadPasteChild.jsm",
- "resource://gre/actors/ClipboardReadPasteParent.jsm": "toolkit/actors/ClipboardReadPasteParent.jsm",
- "resource://gre/actors/ContentMetaChild.jsm": "toolkit/actors/ContentMetaChild.jsm",
- "resource://gre/actors/ContentMetaParent.jsm": "toolkit/actors/ContentMetaParent.jsm",
- "resource://gre/actors/ControllersChild.jsm": "toolkit/actors/ControllersChild.jsm",
- "resource://gre/actors/ControllersParent.jsm": "toolkit/actors/ControllersParent.jsm",
- "resource://gre/actors/CookieBannerChild.jsm.jsm": "toolkit/components/cookiebanners/CookieBannerChild.jsm.jsm",
- "resource://gre/actors/CookieBannerParent.jsm": "toolkit/components/cookiebanners/CookieBannerParent.jsm",
- "resource://gre/actors/DateTimePickerChild.jsm": "toolkit/actors/DateTimePickerChild.jsm",
- "resource://gre/actors/DateTimePickerParent.jsm": "toolkit/actors/DateTimePickerParent.jsm",
- "resource://gre/actors/ExtFindChild.jsm": "toolkit/actors/ExtFindChild.jsm",
- "resource://gre/actors/FindBarChild.jsm": "toolkit/actors/FindBarChild.jsm",
- "resource://gre/actors/FindBarParent.jsm": "toolkit/actors/FindBarParent.jsm",
- "resource://gre/actors/FinderChild.jsm": "toolkit/actors/FinderChild.jsm",
- "resource://gre/actors/FormHistoryChild.jsm": "toolkit/components/satchel/FormHistoryChild.jsm",
- "resource://gre/actors/FormHistoryParent.jsm": "toolkit/components/satchel/FormHistoryParent.jsm",
- "resource://gre/actors/InlineSpellCheckerChild.jsm": "toolkit/actors/InlineSpellCheckerChild.jsm",
- "resource://gre/actors/InlineSpellCheckerParent.jsm": "toolkit/actors/InlineSpellCheckerParent.jsm",
- "resource://gre/actors/KeyPressEventModelCheckerChild.jsm": "toolkit/actors/KeyPressEventModelCheckerChild.jsm",
- "resource://gre/actors/LayoutDebugChild.jsm": "layout/tools/layout-debug/LayoutDebugChild.jsm",
- "resource://gre/actors/NetErrorChild.jsm": "toolkit/actors/NetErrorChild.jsm",
- "resource://gre/actors/NetErrorParent.jsm": "toolkit/actors/NetErrorParent.jsm",
- "resource://gre/actors/PictureInPictureChild.jsm": "toolkit/actors/PictureInPictureChild.jsm",
- "resource://gre/actors/PopupBlockingChild.jsm": "toolkit/actors/PopupBlockingChild.jsm",
- "resource://gre/actors/PopupBlockingParent.jsm": "toolkit/actors/PopupBlockingParent.jsm",
- "resource://gre/actors/PrintingChild.jsm": "toolkit/actors/PrintingChild.jsm",
- "resource://gre/actors/PrintingParent.jsm": "toolkit/actors/PrintingParent.jsm",
- "resource://gre/actors/PrintingSelectionChild.jsm": "toolkit/actors/PrintingSelectionChild.jsm",
- "resource://gre/actors/PurgeSessionHistoryChild.jsm": "toolkit/actors/PurgeSessionHistoryChild.jsm",
- "resource://gre/actors/RemotePageChild.jsm": "toolkit/actors/RemotePageChild.jsm",
- "resource://gre/actors/SelectChild.jsm": "toolkit/actors/SelectChild.jsm",
- "resource://gre/actors/SelectParent.jsm": "toolkit/actors/SelectParent.jsm",
- "resource://gre/actors/ThumbnailsChild.jsm": "toolkit/actors/ThumbnailsChild.jsm",
- "resource://gre/actors/UAWidgetsChild.jsm": "toolkit/actors/UAWidgetsChild.jsm",
- "resource://gre/actors/UnselectedTabHoverChild.jsm": "toolkit/actors/UnselectedTabHoverChild.jsm",
- "resource://gre/actors/UnselectedTabHoverParent.jsm": "toolkit/actors/UnselectedTabHoverParent.jsm",
- "resource://gre/actors/ViewSourceChild.jsm": "toolkit/actors/ViewSourceChild.jsm",
- "resource://gre/actors/ViewSourcePageChild.jsm": "toolkit/actors/ViewSourcePageChild.jsm",
- "resource://gre/actors/ViewSourcePageParent.jsm": "toolkit/actors/ViewSourcePageParent.jsm",
- "resource://gre/actors/WebChannelChild.jsm": "toolkit/actors/WebChannelChild.jsm",
- "resource://gre/actors/WebChannelParent.jsm": "toolkit/actors/WebChannelParent.jsm",
- "resource://gre/modules/AboutCertViewerChild.jsm": "toolkit/components/certviewer/AboutCertViewerChild.jsm",
- "resource://gre/modules/AboutCertViewerParent.jsm": "toolkit/components/certviewer/AboutCertViewerParent.jsm",
- "resource://gre/modules/AboutPagesUtils.jsm": "toolkit/modules/AboutPagesUtils.jsm",
- "resource://gre/modules/AboutReader.jsm": "toolkit/components/reader/AboutReader.jsm",
- "resource://gre/modules/AbuseReporter.jsm": "toolkit/mozapps/extensions/AbuseReporter.jsm",
- "resource://gre/modules/ActorManagerParent.jsm": "toolkit/modules/ActorManagerParent.jsm",
- "resource://gre/modules/AddonManager.jsm": "toolkit/mozapps/extensions/AddonManager.jsm",
- "resource://gre/modules/AddonSearchEngine.jsm": "toolkit/components/search/AddonSearchEngine.jsm",
- "resource://gre/modules/AndroidLog.jsm": "mobile/android/modules/geckoview/AndroidLog.jsm",
- "resource://gre/modules/AppConstants.jsm": "toolkit/modules/AppConstants.jsm",
- "resource://gre/modules/AppMenuNotifications.jsm": "toolkit/modules/AppMenuNotifications.jsm",
- "resource://gre/modules/AsanReporter.jsm": "toolkit/modules/AsanReporter.jsm",
- "resource://gre/modules/AsyncPrefs.jsm": "toolkit/modules/AsyncPrefs.jsm",
- "resource://gre/modules/AsyncShutdown.jsm": "toolkit/components/asyncshutdown/AsyncShutdown.jsm",
- "resource://gre/modules/AutoCompleteSimpleSearch.jsm": "toolkit/components/autocomplete/AutoCompleteSimpleSearch.jsm",
- "resource://gre/modules/BHRTelemetryService.jsm": "toolkit/components/backgroundhangmonitor/BHRTelemetryService.jsm",
- "resource://gre/modules/BackgroundPageThumbs.jsm": "toolkit/components/thumbnails/BackgroundPageThumbs.jsm",
- "resource://gre/modules/BackgroundTasksManager.jsm": "toolkit/components/backgroundtasks/BackgroundTasksManager.jsm",
- "resource://gre/modules/BackgroundTasksUtils.jsm": "toolkit/components/backgroundtasks/BackgroundTasksUtils.jsm",
- "resource://gre/modules/BackgroundUpdate.jsm": "toolkit/mozapps/update/BackgroundUpdate.jsm",
- "resource://gre/modules/BinarySearch.jsm": "toolkit/modules/BinarySearch.jsm",
- "resource://gre/modules/Bits.jsm": "toolkit/components/bitsdownload/Bits.jsm",
- "resource://gre/modules/Blocklist.jsm": "toolkit/mozapps/extensions/Blocklist.jsm",
- "resource://gre/modules/BookmarkHTMLUtils.jsm": "toolkit/components/places/BookmarkHTMLUtils.jsm",
- "resource://gre/modules/BookmarkJSONUtils.jsm": "toolkit/components/places/BookmarkJSONUtils.jsm",
- "resource://gre/modules/Bookmarks.jsm": "toolkit/components/places/Bookmarks.jsm",
- "resource://gre/modules/BrowserTelemetryUtils.jsm": "toolkit/modules/BrowserTelemetryUtils.jsm",
- "resource://gre/modules/BrowserUtils.jsm": "toolkit/modules/BrowserUtils.jsm",
- "resource://gre/modules/CSV.js": "toolkit/components/passwordmgr/CSV.js",
- "resource://gre/modules/CanonicalJSON.jsm": "toolkit/modules/CanonicalJSON.jsm",
- "resource://gre/modules/CaptiveDetect.jsm": "toolkit/components/captivedetect/CaptiveDetect.jsm",
- "resource://gre/modules/CertUtils.jsm": "toolkit/modules/CertUtils.jsm",
- "resource://gre/modules/ChildCrashHandler.jsm": "mobile/android/modules/geckoview/ChildCrashHandler.jsm",
- "resource://gre/modules/ClearDataService.jsm": "toolkit/components/cleardata/ClearDataService.jsm",
- "resource://gre/modules/ClientID.jsm": "toolkit/components/telemetry/app/ClientID.jsm",
- "resource://gre/modules/Color.jsm": "toolkit/modules/Color.jsm",
- "resource://gre/modules/ColorPickerDelegate.jsm": "mobile/android/components/geckoview/ColorPickerDelegate.jsm",
- "resource://gre/modules/CommonDialog.jsm": "toolkit/components/prompts/src/CommonDialog.jsm",
- "resource://gre/modules/ComponentUtils.jsm": "js/xpconnect/loader/ComponentUtils.jsm",
- "resource://gre/modules/ConduitsChild.jsm": "toolkit/components/extensions/ConduitsChild.jsm",
- "resource://gre/modules/ConduitsParent.jsm": "toolkit/components/extensions/ConduitsParent.jsm",
- "resource://gre/modules/Console.jsm": "toolkit/modules/Console.jsm",
- "resource://gre/modules/ConsoleAPIStorage.jsm": "dom/console/ConsoleAPIStorage.jsm",
- "resource://gre/modules/ContentAreaDropListener.jsm": "dom/base/ContentAreaDropListener.jsm",
- "resource://gre/modules/ContentBlockingAllowList.jsm": "toolkit/components/antitracking/ContentBlockingAllowList.jsm",
- "resource://gre/modules/ContentDOMReference.jsm": "toolkit/modules/ContentDOMReference.jsm",
- "resource://gre/modules/ContentDispatchChooser.jsm": "toolkit/mozapps/handling/ContentDispatchChooser.jsm",
- "resource://gre/modules/ContentPrefService2.jsm": "toolkit/components/contentprefs/ContentPrefService2.jsm",
- "resource://gre/modules/ContentPrefServiceChild.jsm": "toolkit/components/contentprefs/ContentPrefServiceChild.jsm",
- "resource://gre/modules/ContentPrefServiceParent.jsm": "toolkit/components/contentprefs/ContentPrefServiceParent.jsm",
- "resource://gre/modules/ContentPrefStore.jsm": "toolkit/components/contentprefs/ContentPrefStore.jsm",
- "resource://gre/modules/ContentPrefUtils.jsm": "toolkit/components/contentprefs/ContentPrefUtils.jsm",
- "resource://gre/modules/ContextualIdentityService.jsm": "toolkit/components/contextualidentity/ContextualIdentityService.jsm",
- "resource://gre/modules/CoveragePing.jsm": "toolkit/components/telemetry/pings/CoveragePing.jsm",
- "resource://gre/modules/CrashManager.jsm": "toolkit/components/crashes/CrashManager.in.jsm",
- "resource://gre/modules/CrashMonitor.jsm": "toolkit/components/crashmonitor/CrashMonitor.jsm",
- "resource://gre/modules/CrashReports.jsm": "toolkit/crashreporter/CrashReports.jsm",
- "resource://gre/modules/CrashService.jsm": "toolkit/components/crashes/CrashService.jsm",
- "resource://gre/modules/CrashSubmit.jsm": "toolkit/crashreporter/CrashSubmit.jsm",
- "resource://gre/modules/Credentials.jsm": "services/fxaccounts/Credentials.jsm",
- "resource://gre/modules/CreditCard.jsm": "toolkit/modules/CreditCard.jsm",
- "resource://gre/modules/CustomElementsListener.jsm": "toolkit/components/processsingleton/CustomElementsListener.jsm",
- "resource://gre/modules/DOMRequestHelper.jsm": "dom/base/DOMRequestHelper.jsm",
- "resource://gre/modules/DateTimePickerPanel.jsm": "toolkit/modules/DateTimePickerPanel.jsm",
- "resource://gre/modules/DefaultCLH.jsm": "toolkit/components/DefaultCLH.jsm",
- "resource://gre/modules/DeferredTask.jsm": "toolkit/modules/DeferredTask.jsm",
- "resource://gre/modules/DelayedInit.jsm": "mobile/android/modules/geckoview/DelayedInit.jsm",
- "resource://gre/modules/Deprecated.jsm": "toolkit/modules/Deprecated.jsm",
- "resource://gre/modules/DownloadCore.jsm": "toolkit/components/downloads/DownloadCore.jsm",
- "resource://gre/modules/DownloadHistory.jsm": "toolkit/components/downloads/DownloadHistory.jsm",
- "resource://gre/modules/DownloadIntegration.jsm": "toolkit/components/downloads/DownloadIntegration.jsm",
- "resource://gre/modules/DownloadLastDir.jsm": "toolkit/mozapps/downloads/DownloadLastDir.jsm",
- "resource://gre/modules/DownloadLegacy.jsm": "toolkit/components/downloads/DownloadLegacy.jsm",
- "resource://gre/modules/DownloadList.jsm": "toolkit/components/downloads/DownloadList.jsm",
- "resource://gre/modules/DownloadPaths.jsm": "toolkit/components/downloads/DownloadPaths.jsm",
- "resource://gre/modules/DownloadStore.jsm": "toolkit/components/downloads/DownloadStore.jsm",
- "resource://gre/modules/DownloadUIHelper.jsm": "toolkit/components/downloads/DownloadUIHelper.jsm",
- "resource://gre/modules/DownloadUtils.jsm": "toolkit/mozapps/downloads/DownloadUtils.jsm",
- "resource://gre/modules/Downloads.jsm": "toolkit/components/downloads/Downloads.jsm",
- "resource://gre/modules/E10SUtils.jsm": "toolkit/modules/E10SUtils.jsm",
- "resource://gre/modules/EnterprisePolicies.jsm": "toolkit/components/enterprisepolicies/EnterprisePolicies.jsm",
- "resource://gre/modules/EnterprisePoliciesContent.jsm": "toolkit/components/enterprisepolicies/EnterprisePoliciesContent.jsm",
- "resource://gre/modules/EnterprisePoliciesParent.jsm": "toolkit/components/enterprisepolicies/EnterprisePoliciesParent.jsm",
- "resource://gre/modules/EventEmitter.jsm": "toolkit/modules/EventEmitter.jsm",
- "resource://gre/modules/EventPing.jsm": "toolkit/components/telemetry/pings/EventPing.jsm",
- "resource://gre/modules/ExtHandlerService.jsm": "uriloader/exthandler/ExtHandlerService.jsm",
- "resource://gre/modules/Extension.jsm": "toolkit/components/extensions/Extension.jsm",
- "resource://gre/modules/ExtensionActions.jsm": "toolkit/components/extensions/ExtensionActions.jsm",
- "resource://gre/modules/ExtensionActivityLog.jsm": "toolkit/components/extensions/ExtensionActivityLog.jsm",
- "resource://gre/modules/ExtensionChild.jsm": "toolkit/components/extensions/ExtensionChild.jsm",
- "resource://gre/modules/ExtensionChildDevToolsUtils.jsm": "toolkit/components/extensions/ExtensionChildDevToolsUtils.jsm",
- "resource://gre/modules/ExtensionCommon.jsm": "toolkit/components/extensions/ExtensionCommon.jsm",
- "resource://gre/modules/ExtensionContent.jsm": "toolkit/components/extensions/ExtensionContent.jsm",
- "resource://gre/modules/ExtensionPageChild.jsm": "toolkit/components/extensions/ExtensionPageChild.jsm",
- "resource://gre/modules/ExtensionParent.jsm": "toolkit/components/extensions/ExtensionParent.jsm",
- "resource://gre/modules/ExtensionPermissions.jsm": "toolkit/components/extensions/ExtensionPermissions.jsm",
- "resource://gre/modules/ExtensionPreferencesManager.jsm": "toolkit/components/extensions/ExtensionPreferencesManager.jsm",
- "resource://gre/modules/ExtensionProcessScript.jsm": "toolkit/components/extensions/ExtensionProcessScript.jsm",
- "resource://gre/modules/ExtensionScriptingStore.jsm": "toolkit/components/extensions/ExtensionScriptingStore.jsm",
- "resource://gre/modules/ExtensionSearchHandler.jsm": "toolkit/components/places/ExtensionSearchHandler.jsm",
- "resource://gre/modules/ExtensionSettingsStore.jsm": "toolkit/components/extensions/ExtensionSettingsStore.jsm",
- "resource://gre/modules/ExtensionShortcuts.jsm": "toolkit/components/extensions/ExtensionShortcuts.jsm",
- "resource://gre/modules/ExtensionStorage.jsm": "toolkit/components/extensions/ExtensionStorage.jsm",
- "resource://gre/modules/ExtensionStorageComponents.jsm": "toolkit/components/extensions/storage/ExtensionStorageComponents.jsm",
- "resource://gre/modules/ExtensionStorageIDB.jsm": "toolkit/components/extensions/ExtensionStorageIDB.jsm",
- "resource://gre/modules/ExtensionStorageSync.jsm": "toolkit/components/extensions/ExtensionStorageSync.jsm",
- "resource://gre/modules/ExtensionStorageSyncKinto.jsm": "toolkit/components/extensions/ExtensionStorageSyncKinto.jsm",
- "resource://gre/modules/ExtensionTelemetry.jsm": "toolkit/components/extensions/ExtensionTelemetry.jsm",
- "resource://gre/modules/ExtensionUtils.jsm": "toolkit/components/extensions/ExtensionUtils.jsm",
- "resource://gre/modules/ExtensionWorkerChild.jsm": "toolkit/components/extensions/ExtensionWorkerChild.jsm",
- "resource://gre/modules/FilePickerDelegate.jsm": "mobile/android/components/geckoview/FilePickerDelegate.jsm",
- "resource://gre/modules/FileUtils.jsm": "toolkit/modules/FileUtils.jsm",
- "resource://gre/modules/FindBarContent.jsm": "toolkit/modules/FindBarContent.jsm",
- "resource://gre/modules/FindContent.jsm": "toolkit/components/extensions/FindContent.jsm",
- "resource://gre/modules/Finder.jsm": "toolkit/modules/Finder.jsm",
- "resource://gre/modules/FinderHighlighter.jsm": "toolkit/modules/FinderHighlighter.jsm",
- "resource://gre/modules/FinderIterator.jsm": "toolkit/modules/FinderIterator.jsm",
- "resource://gre/modules/FinderParent.jsm": "toolkit/modules/FinderParent.jsm",
- "resource://gre/modules/FirefoxRelay.jsm": "toolkit/components/passwordmgr/FirefoxRelay.jsm",
- "resource://gre/modules/FirstStartup.jsm": "toolkit/modules/FirstStartup.jsm",
- "resource://gre/modules/ForgetAboutSite.jsm": "toolkit/components/forgetaboutsite/ForgetAboutSite.jsm",
- "resource://gre/modules/FormHistory.jsm": "toolkit/components/satchel/FormHistory.jsm",
- "resource://gre/modules/FormAutoComplete.jsm": "toolkit/components/satchel/FormHistoryAutoComplete.jsm",
- "resource://gre/modules/FormHistoryStartup.jsm": "toolkit/components/satchel/FormHistoryStartup.jsm",
- "resource://gre/modules/FormLikeFactory.jsm": "toolkit/modules/FormLikeFactory.jsm",
- "resource://gre/modules/FxAccounts.jsm": "services/fxaccounts/FxAccounts.jsm",
- "resource://gre/modules/FxAccountsClient.jsm": "services/fxaccounts/FxAccountsClient.jsm",
- "resource://gre/modules/FxAccountsCommands.js": "services/fxaccounts/FxAccountsCommands.js",
- "resource://gre/modules/FxAccountsCommon.js": "services/fxaccounts/FxAccountsCommon.js",
- "resource://gre/modules/FxAccountsConfig.jsm": "services/fxaccounts/FxAccountsConfig.jsm",
- "resource://gre/modules/FxAccountsDevice.jsm": "services/fxaccounts/FxAccountsDevice.jsm",
- "resource://gre/modules/FxAccountsKeys.jsm": "services/fxaccounts/FxAccountsKeys.jsm",
- "resource://gre/modules/FxAccountsPairing.jsm": "services/fxaccounts/FxAccountsPairing.jsm",
- "resource://gre/modules/FxAccountsPairingChannel.js": "services/fxaccounts/FxAccountsPairingChannel.js",
- "resource://gre/modules/FxAccountsProfile.jsm": "services/fxaccounts/FxAccountsProfile.jsm",
- "resource://gre/modules/FxAccountsProfileClient.jsm": "services/fxaccounts/FxAccountsProfileClient.jsm",
- "resource://gre/modules/FxAccountsPush.jsm": "services/fxaccounts/FxAccountsPush.jsm",
- "resource://gre/modules/FxAccountsStorage.jsm": "services/fxaccounts/FxAccountsStorage.jsm",
- "resource://gre/modules/FxAccountsTelemetry.jsm": "services/fxaccounts/FxAccountsTelemetry.jsm",
- "resource://gre/modules/FxAccountsWebChannel.jsm": "services/fxaccounts/FxAccountsWebChannel.jsm",
- "resource://gre/modules/GMPInstallManager.jsm": "toolkit/modules/GMPInstallManager.jsm",
- "resource://gre/modules/GMPUtils.jsm": "toolkit/modules/GMPUtils.jsm",
- "resource://gre/modules/GeckoViewAutocomplete.jsm": "mobile/android/modules/geckoview/GeckoViewAutocomplete.jsm",
- "resource://gre/modules/GeckoViewAutofill.jsm": "mobile/android/modules/geckoview/GeckoViewAutofill.jsm",
- "resource://gre/modules/GeckoViewChildModule.jsm": "mobile/android/modules/geckoview/GeckoViewChildModule.jsm",
- "resource://gre/modules/GeckoViewConsole.jsm": "mobile/android/modules/geckoview/GeckoViewConsole.jsm",
- "resource://gre/modules/GeckoViewContent.jsm": "mobile/android/modules/geckoview/GeckoViewContent.jsm",
- "resource://gre/modules/GeckoViewContentBlocking.jsm": "mobile/android/modules/geckoview/GeckoViewContentBlocking.jsm",
- "resource://gre/modules/GeckoViewMediaControl.jsm": "mobile/android/modules/geckoview/GeckoViewMediaControl.jsm",
- "resource://gre/modules/GeckoViewModule.jsm": "mobile/android/modules/geckoview/GeckoViewModule.jsm",
- "resource://gre/modules/GeckoViewNavigation.jsm": "mobile/android/modules/geckoview/GeckoViewNavigation.jsm",
- "resource://gre/modules/GeckoViewPermission.jsm": "mobile/android/components/geckoview/GeckoViewPermission.jsm",
- "resource://gre/modules/GeckoViewProcessHangMonitor.jsm": "mobile/android/modules/geckoview/GeckoViewProcessHangMonitor.jsm",
- "resource://gre/modules/GeckoViewProgress.jsm": "mobile/android/modules/geckoview/GeckoViewProgress.jsm",
- "resource://gre/modules/GeckoViewPrompt.jsm": "mobile/android/components/geckoview/GeckoViewPrompt.jsm",
- "resource://gre/modules/GeckoViewPush.jsm": "mobile/android/components/geckoview/GeckoViewPush.jsm",
- "resource://gre/modules/GeckoViewPushController.jsm": "mobile/android/modules/geckoview/GeckoViewPushController.jsm",
- "resource://gre/modules/GeckoViewRemoteDebugger.jsm": "mobile/android/modules/geckoview/GeckoViewRemoteDebugger.jsm",
- "resource://gre/modules/GeckoViewSelectionAction.jsm": "mobile/android/modules/geckoview/GeckoViewSelectionAction.jsm",
- "resource://gre/modules/GeckoViewSettings.jsm": "mobile/android/modules/geckoview/GeckoViewSettings.jsm",
- "resource://gre/modules/GeckoViewStartup.jsm": "mobile/android/components/geckoview/GeckoViewStartup.jsm",
- "resource://gre/modules/GeckoViewStorageController.jsm": "mobile/android/modules/geckoview/GeckoViewStorageController.jsm",
- "resource://gre/modules/GeckoViewTab.jsm": "mobile/android/modules/geckoview/GeckoViewTab.jsm",
- "resource://gre/modules/GeckoViewTelemetry.jsm": "mobile/android/modules/geckoview/GeckoViewTelemetry.jsm",
- "resource://gre/modules/GeckoViewTestUtils.jsm": "mobile/android/modules/geckoview/GeckoViewTestUtils.jsm",
- "resource://gre/modules/GeckoViewWebExtension.jsm": "mobile/android/modules/geckoview/GeckoViewWebExtension.jsm",
- "resource://gre/modules/Geometry.jsm": "toolkit/modules/Geometry.jsm",
- "resource://gre/modules/HealthPing.jsm": "toolkit/components/telemetry/pings/HealthPing.jsm",
- "resource://gre/modules/HelperAppDlg.jsm": "toolkit/mozapps/downloads/HelperAppDlg.jsm",
- "resource://gre/modules/HiddenFrame.jsm": "toolkit/modules/HiddenFrame.jsm",
- "resource://gre/modules/History.jsm": "toolkit/components/places/History.jsm",
- "resource://gre/modules/Http.jsm": "toolkit/modules/Http.jsm",
- "resource://gre/modules/IgnoreLists.jsm": "toolkit/modules/IgnoreLists.jsm",
- "resource://gre/modules/ImageObjectProcessor.jsm": "dom/manifest/ImageObjectProcessor.jsm",
- "resource://gre/modules/IndexedDB.jsm": "toolkit/modules/IndexedDB.jsm",
- "resource://gre/modules/InlineSpellChecker.jsm": "toolkit/modules/InlineSpellChecker.jsm",
- "resource://gre/modules/InlineSpellCheckerContent.jsm": "toolkit/modules/InlineSpellCheckerContent.jsm",
- "resource://gre/modules/InputListAutoComplete.jsm": "toolkit/components/satchel/InputListAutoComplete.jsm",
- "resource://gre/modules/InsecurePasswordUtils.jsm": "toolkit/components/passwordmgr/InsecurePasswordUtils.jsm",
- "resource://gre/modules/Integration.jsm": "toolkit/modules/Integration.jsm",
- "resource://gre/modules/JSONFile.jsm": "toolkit/modules/JSONFile.jsm",
- "resource://gre/modules/JsonSchema.jsm": "toolkit/modules/JsonSchema.jsm",
- "resource://gre/modules/KeywordUtils.jsm": "toolkit/modules/KeywordUtils.jsm",
- "resource://gre/modules/LangPackMatcher.jsm": "intl/locale/LangPackMatcher.jsm",
- "resource://gre/modules/LayoutUtils.jsm": "toolkit/modules/LayoutUtils.jsm",
- "resource://gre/modules/LightweightThemeConsumer.jsm": "toolkit/modules/LightweightThemeConsumer.jsm",
- "resource://gre/modules/LightweightThemeManager.jsm": "toolkit/mozapps/extensions/LightweightThemeManager.jsm",
- "resource://gre/modules/LoadURIDelegate.jsm": "mobile/android/modules/geckoview/LoadURIDelegate.jsm",
- "resource://gre/modules/LocationHelper.jsm": "dom/base/LocationHelper.jsm",
- "resource://gre/modules/Log.jsm": "toolkit/modules/Log.jsm",
- "resource://gre/modules/LoginAutoComplete.jsm": "toolkit/components/passwordmgr/LoginAutoComplete.jsm",
- "resource://gre/modules/LoginCSVImport.jsm": "toolkit/components/passwordmgr/LoginCSVImport.jsm",
- "resource://gre/modules/LoginExport.jsm": "toolkit/components/passwordmgr/LoginExport.jsm",
- "resource://gre/modules/LoginFormFactory.jsm": "toolkit/components/passwordmgr/LoginFormFactory.jsm",
- "resource://gre/modules/LoginHelper.jsm": "toolkit/components/passwordmgr/LoginHelper.jsm",
- "resource://gre/modules/LoginInfo.jsm": "toolkit/components/passwordmgr/LoginInfo.jsm",
- "resource://gre/modules/LoginManager.jsm": "toolkit/components/passwordmgr/LoginManager.jsm",
- "resource://gre/modules/LoginManagerAuthPrompter.jsm": "toolkit/components/passwordmgr/LoginManagerAuthPrompter.jsm",
- "resource://gre/modules/LoginManagerChild.jsm": "toolkit/components/passwordmgr/LoginManagerChild.jsm",
- "resource://gre/modules/LoginManagerContextMenu.jsm": "toolkit/components/passwordmgr/LoginManagerContextMenu.jsm",
- "resource://gre/modules/LoginManagerParent.jsm": "toolkit/components/passwordmgr/LoginManagerParent.jsm",
- "resource://gre/modules/LoginManagerPrompter.jsm": "toolkit/components/passwordmgr/LoginManagerPrompter.jsm",
- "resource://gre/modules/LoginRecipes.jsm": "toolkit/components/passwordmgr/LoginRecipes.jsm",
- "resource://gre/modules/LoginRelatedRealms.jsm": "toolkit/components/passwordmgr/LoginRelatedRealms.jsm",
- "resource://gre/modules/LoginStorageDelegate.jsm": "mobile/android/components/geckoview/LoginStorageDelegate.jsm",
- "resource://gre/modules/LoginStore.jsm": "toolkit/components/passwordmgr/LoginStore.jsm",
- "resource://gre/modules/MainProcessSingleton.jsm": "toolkit/components/processsingleton/MainProcessSingleton.jsm",
- "resource://gre/modules/Manifest.jsm": "dom/manifest/Manifest.jsm",
- "resource://gre/modules/ManifestFinder.jsm": "dom/manifest/ManifestFinder.jsm",
- "resource://gre/modules/ManifestIcons.jsm": "dom/manifest/ManifestIcons.jsm",
- "resource://gre/modules/ManifestMessagesChild.jsm": "dom/ipc/ManifestMessagesChild.jsm",
- "resource://gre/modules/ManifestObtainer.jsm": "dom/manifest/ManifestObtainer.jsm",
- "resource://gre/modules/ManifestProcessor.jsm": "dom/manifest/ManifestProcessor.jsm",
- "resource://gre/modules/MatchURLFilters.jsm": "toolkit/components/extensions/MatchURLFilters.jsm",
- "resource://gre/modules/MediaUtils.jsm": "mobile/android/modules/geckoview/MediaUtils.jsm",
- "resource://gre/modules/MessageManagerProxy.jsm": "toolkit/components/extensions/MessageManagerProxy.jsm",
- "resource://gre/modules/ModulesPing.jsm": "toolkit/components/telemetry/pings/ModulesPing.jsm",
- "resource://gre/modules/MozProtocolHandler.jsm": "toolkit/components/mozprotocol/MozProtocolHandler.jsm",
- "resource://gre/modules/NLP.jsm": "toolkit/modules/NLP.jsm",
- "resource://gre/modules/NativeManifests.jsm": "toolkit/components/extensions/NativeManifests.jsm",
- "resource://gre/modules/NativeMessaging.jsm": "toolkit/components/extensions/NativeMessaging.jsm",
- "resource://gre/modules/NetUtil.jsm": "netwerk/base/NetUtil.jsm",
- "resource://gre/modules/NetworkGeolocationProvider.jsm": "dom/system/NetworkGeolocationProvider.jsm",
- "resource://gre/modules/NewPasswordModel.jsm": "toolkit/components/passwordmgr/NewPasswordModel.jsm",
- "resource://gre/modules/NewTabUtils.jsm": "toolkit/modules/NewTabUtils.jsm",
- "resource://gre/modules/NotificationStorage.jsm": "dom/notification/NotificationStorage.jsm",
- "resource://gre/modules/OSCrypto.jsm": "toolkit/components/passwordmgr/OSCrypto.jsm",
- "resource://gre/modules/OSCrypto_win.jsm": "toolkit/components/passwordmgr/OSCrypto_win.jsm",
- "resource://gre/modules/OSKeyStore.jsm": "toolkit/modules/OSKeyStore.jsm",
- "resource://gre/modules/ObjectUtils.jsm": "toolkit/modules/ObjectUtils.jsm",
- "resource://gre/modules/OpenSearchEngine.jsm": "toolkit/components/search/OpenSearchEngine.jsm",
- "resource://gre/modules/OsEnvironment.jsm": "toolkit/modules/OsEnvironment.jsm",
- "resource://gre/modules/PageThumbUtils.jsm": "toolkit/components/thumbnails/PageThumbUtils.jsm",
- "resource://gre/modules/PageThumbs.jsm": "toolkit/components/thumbnails/PageThumbs.jsm",
- "resource://gre/modules/PageThumbsStorageService.jsm": "toolkit/components/thumbnails/PageThumbsStorageService.jsm",
- "resource://gre/modules/PartitioningExceptionListService.jsm": "toolkit/components/antitracking/PartitioningExceptionListService.jsm",
- "resource://gre/modules/PasswordGenerator.jsm": "toolkit/components/passwordmgr/PasswordGenerator.jsm",
- "resource://gre/modules/PasswordRulesManager.jsm": "toolkit/components/passwordmgr/PasswordRulesManager.jsm",
- "resource://gre/modules/PasswordRulesParser.jsm": "toolkit/components/passwordmgr/PasswordRulesParser.jsm",
- "resource://gre/modules/PerformanceCounters.jsm": "toolkit/components/extensions/PerformanceCounters.jsm",
- "resource://gre/modules/PermissionsUtils.jsm": "toolkit/modules/PermissionsUtils.jsm",
- "resource://gre/modules/PictureInPicture.jsm": "toolkit/components/pictureinpicture/PictureInPicture.jsm",
- "resource://gre/modules/PictureInPictureControls.jsm": "toolkit/components/pictureinpicture/PictureInPictureControls.jsm",
- "resource://gre/modules/PlacesBackups.jsm": "toolkit/components/places/PlacesBackups.jsm",
- "resource://gre/modules/PlacesDBUtils.jsm": "toolkit/components/places/PlacesDBUtils.jsm",
- "resource://gre/modules/PlacesExpiration.jsm": "toolkit/components/places/PlacesExpiration.jsm",
- "resource://gre/modules/PlacesPreviews.jsm": "toolkit/components/places/PlacesPreviews.jsm",
- "resource://gre/modules/PlacesSyncUtils.jsm": "toolkit/components/places/PlacesSyncUtils.jsm",
- "resource://gre/modules/PlacesTransactions.jsm": "toolkit/components/places/PlacesTransactions.jsm",
- "resource://gre/modules/PlacesUtils.jsm": "toolkit/components/places/PlacesUtils.jsm",
- "resource://gre/modules/PolicySearchEngine.jsm": "toolkit/components/search/PolicySearchEngine.jsm",
- "resource://gre/modules/PopupNotifications.jsm": "toolkit/modules/PopupNotifications.jsm",
- "resource://gre/modules/Preferences.jsm": "toolkit/modules/Preferences.jsm",
- "resource://gre/modules/PrincipalsCollector.jsm": "toolkit/components/cleardata/PrincipalsCollector.jsm",
- "resource://gre/modules/PrivateBrowsingUtils.jsm": "toolkit/modules/PrivateBrowsingUtils.jsm",
- "resource://gre/modules/ProcessSelector.jsm": "dom/base/ProcessSelector.jsm",
- "resource://gre/modules/ProcessType.jsm": "toolkit/modules/ProcessType.jsm",
- "resource://gre/modules/ProfileAge.jsm": "toolkit/modules/ProfileAge.jsm",
- "resource://gre/modules/PromiseUtils.jsm": "toolkit/modules/PromiseUtils.jsm",
- "resource://gre/modules/PromiseWorker.jsm": "toolkit/components/promiseworker/PromiseWorker.jsm",
- "resource://gre/modules/PromptCollection.jsm": "mobile/android/components/geckoview/PromptCollection.jsm",
- "resource://gre/modules/Prompter.jsm": "toolkit/components/prompts/src/Prompter.jsm",
- "resource://gre/modules/PropertyListUtils.jsm": "toolkit/modules/PropertyListUtils.jsm",
- "resource://gre/modules/ProxyChannelFilter.jsm": "toolkit/components/extensions/ProxyChannelFilter.jsm",
- "resource://gre/modules/PurgeTrackerService.jsm": "toolkit/components/antitracking/PurgeTrackerService.jsm",
- "resource://gre/modules/RFPHelper.jsm": "toolkit/components/resistfingerprinting/RFPHelper.jsm",
- "resource://gre/modules/ReaderMode.jsm": "toolkit/components/reader/ReaderMode.jsm",
- "resource://gre/modules/Readerable.jsm": "toolkit/components/reader/Readerable.jsm",
- "resource://gre/modules/Region.jsm": "toolkit/modules/Region.jsm",
- "resource://gre/modules/RemotePageAccessManager.jsm": "toolkit/modules/RemotePageAccessManager.jsm",
- "resource://gre/modules/RemoteWebNavigation.jsm": "toolkit/components/remotebrowserutils/RemoteWebNavigation.jsm",
- "resource://gre/modules/ResetProfile.jsm": "toolkit/modules/ResetProfile.jsm",
- "resource://gre/modules/ResponsivenessMonitor.jsm": "toolkit/modules/ResponsivenessMonitor.jsm",
- "resource://gre/modules/SafeBrowsing.jsm": "toolkit/components/url-classifier/SafeBrowsing.jsm",
- "resource://gre/modules/SanityTest.jsm": "toolkit/components/gfx/SanityTest.jsm",
- "resource://gre/modules/Schemas.jsm": "toolkit/components/extensions/Schemas.jsm",
- "resource://gre/modules/SearchEngine.jsm": "toolkit/components/search/SearchEngine.jsm",
- "resource://gre/modules/SearchEngineSelector.jsm": "toolkit/components/search/SearchEngineSelector.jsm",
- "resource://gre/modules/SearchService.jsm": "toolkit/components/search/SearchService.jsm",
- "resource://gre/modules/SearchSettings.jsm": "toolkit/components/search/SearchSettings.jsm",
- "resource://gre/modules/SearchStaticData.jsm": "toolkit/components/search/SearchStaticData.jsm",
- "resource://gre/modules/SearchSuggestionController.jsm": "toolkit/components/search/SearchSuggestionController.jsm",
- "resource://gre/modules/SearchSuggestions.jsm": "toolkit/components/search/SearchSuggestions.jsm",
- "resource://gre/modules/SearchUtils.jsm": "toolkit/components/search/SearchUtils.jsm",
- "resource://gre/modules/SecurityInfo.jsm": "toolkit/components/extensions/webrequest/SecurityInfo.jsm",
- "resource://gre/modules/SelectionUtils.jsm": "toolkit/modules/SelectionUtils.jsm",
- "resource://gre/modules/ServiceRequest.jsm": "toolkit/modules/ServiceRequest.jsm",
- "resource://gre/modules/ServiceWorkerCleanUp.jsm": "toolkit/components/cleardata/ServiceWorkerCleanUp.jsm",
- "resource://gre/modules/Services.jsm": "toolkit/modules/Services.jsm",
- "resource://gre/modules/SessionStoreFunctions.jsm": "toolkit/components/sessionstore/SessionStoreFunctions.jsm",
- "resource://gre/modules/ShareDelegate.jsm": "mobile/android/components/geckoview/ShareDelegate.jsm",
- "resource://gre/modules/SharedPromptUtils.jsm": "toolkit/components/prompts/src/PromptUtils.jsm",
- "resource://gre/modules/ShieldContentProcess.jsm": "toolkit/components/normandy/ShieldContentProcess.jsm",
- "resource://gre/modules/ShortcutUtils.jsm": "toolkit/modules/ShortcutUtils.jsm",
- "resource://gre/modules/SimpleServices.jsm": "toolkit/components/utils/SimpleServices.jsm",
- "resource://gre/modules/SignUpFormRuleset.jsm": "toolkit/components/passwordmgr/SignUpFormRuleset.jsm",
- "resource://gre/modules/SlowScriptDebug.jsm": "dom/base/SlowScriptDebug.jsm",
- "resource://gre/modules/Sqlite.jsm": "toolkit/modules/Sqlite.jsm",
- "resource://gre/modules/SubDialog.jsm": "toolkit/modules/SubDialog.jsm",
- "resource://gre/modules/Subprocess.jsm": "toolkit/modules/subprocess/Subprocess.jsm",
- "resource://gre/modules/SyncedBookmarksMirror.jsm": "toolkit/components/places/SyncedBookmarksMirror.jsm",
- "resource://gre/modules/TaggingService.jsm": "toolkit/components/places/TaggingService.jsm",
- "resource://gre/modules/TaskScheduler.jsm": "toolkit/components/taskscheduler/TaskScheduler.jsm",
- "resource://gre/modules/TaskSchedulerMacOSImpl.jsm": "toolkit/components/taskscheduler/TaskSchedulerMacOSImpl.jsm",
- "resource://gre/modules/TaskSchedulerWinImpl.jsm": "toolkit/components/taskscheduler/TaskSchedulerWinImpl.jsm",
- "resource://gre/modules/TelemetryArchive.jsm": "toolkit/components/telemetry/app/TelemetryArchive.jsm",
- "resource://gre/modules/TelemetryController.jsm": "toolkit/components/telemetry/app/TelemetryController.jsm",
- "resource://gre/modules/TelemetryControllerBase.jsm": "toolkit/components/telemetry/app/TelemetryControllerBase.jsm",
- "resource://gre/modules/TelemetryControllerContent.jsm": "toolkit/components/telemetry/app/TelemetryControllerContent.jsm",
- "resource://gre/modules/TelemetryControllerParent.jsm": "toolkit/components/telemetry/app/TelemetryControllerParent.jsm",
- "resource://gre/modules/TelemetryEnvironment.jsm": "toolkit/components/telemetry/app/TelemetryEnvironment.jsm",
- "resource://gre/modules/TelemetryReportingPolicy.jsm": "toolkit/components/telemetry/app/TelemetryReportingPolicy.jsm",
- "resource://gre/modules/TelemetryScheduler.jsm": "toolkit/components/telemetry/app/TelemetryScheduler.jsm",
- "resource://gre/modules/TelemetrySend.jsm": "toolkit/components/telemetry/app/TelemetrySend.jsm",
- "resource://gre/modules/TelemetrySession.jsm": "toolkit/components/telemetry/pings/TelemetrySession.jsm",
- "resource://gre/modules/TelemetryStartup.jsm": "toolkit/components/telemetry/TelemetryStartup.jsm",
- "resource://gre/modules/TelemetryStorage.jsm": "toolkit/components/telemetry/app/TelemetryStorage.jsm",
- "resource://gre/modules/TelemetryTimestamps.jsm": "toolkit/components/telemetry/app/TelemetryTimestamps.jsm",
- "resource://gre/modules/TelemetryUtils.jsm": "toolkit/components/telemetry/app/TelemetryUtils.jsm",
- "resource://gre/modules/Timer.jsm": "toolkit/modules/Timer.jsm",
- "resource://gre/modules/TooltipTextProvider.jsm": "toolkit/components/tooltiptext/TooltipTextProvider.jsm",
- "resource://gre/modules/TrackingDBService.jsm": "toolkit/components/antitracking/TrackingDBService.jsm",
- "resource://gre/modules/Troubleshoot.jsm": "toolkit/modules/Troubleshoot.jsm",
- "resource://gre/modules/URIFixup.jsm": "docshell/base/URIFixup.jsm",
- "resource://gre/modules/URLDecorationAnnotationsService.jsm": "toolkit/components/antitracking/URLDecorationAnnotationsService.jsm",
- "resource://gre/modules/URLFormatter.jsm": "toolkit/components/urlformatter/URLFormatter.jsm",
- "resource://gre/modules/URLQueryStrippingListService.jsm": "toolkit/components/antitracking/URLQueryStrippingListService.jsm",
- "resource://gre/modules/UninstallPing.jsm": "toolkit/components/telemetry/pings/UninstallPing.jsm",
- "resource://gre/modules/UntrustedModulesPing.jsm": "toolkit/components/telemetry/pings/UntrustedModulesPing.jsm",
- "resource://gre/modules/UpdateListener.jsm": "toolkit/mozapps/update/UpdateListener.jsm",
- "resource://gre/modules/UpdatePing.jsm": "toolkit/components/telemetry/pings/UpdatePing.jsm",
- "resource://gre/modules/UpdateService.jsm": "toolkit/mozapps/update/UpdateService.jsm",
- "resource://gre/modules/UpdateServiceStub.jsm": "toolkit/mozapps/update/UpdateServiceStub.jsm",
- "resource://gre/modules/UpdateTelemetry.jsm": "toolkit/mozapps/update/UpdateTelemetry.jsm",
- "resource://gre/modules/UpdateTimerManager.jsm": "toolkit/components/timermanager/UpdateTimerManager.jsm",
- "resource://gre/modules/UpdateUtils.jsm": "toolkit/modules/UpdateUtils.jsm",
- "resource://gre/modules/UrlClassifierExceptionListService.jsm": "netwerk/url-classifier/UrlClassifierExceptionListService.jsm",
- "resource://gre/modules/UrlClassifierHashCompleter.jsm": "toolkit/components/url-classifier/UrlClassifierHashCompleter.jsm",
- "resource://gre/modules/UrlClassifierLib.jsm": "toolkit/components/url-classifier/UrlClassifierLib.jsm",
- "resource://gre/modules/UrlClassifierListManager.jsm": "toolkit/components/url-classifier/UrlClassifierListManager.jsm",
- "resource://gre/modules/UserSearchEngine.jsm": "toolkit/components/search/UserSearchEngine.jsm",
- "resource://gre/modules/ValueExtractor.jsm": "dom/manifest/ValueExtractor.jsm",
- "resource://gre/modules/WebChannel.jsm": "toolkit/modules/WebChannel.jsm",
- "resource://gre/modules/WebHandlerApp.jsm": "uriloader/exthandler/WebHandlerApp.jsm",
- "resource://gre/modules/WebNavigation.jsm": "toolkit/components/extensions/WebNavigation.jsm",
- "resource://gre/modules/WebNavigationFrames.jsm": "toolkit/components/extensions/WebNavigationFrames.jsm",
- "resource://gre/modules/WebRequest.jsm": "toolkit/components/extensions/webrequest/WebRequest.jsm",
- "resource://gre/modules/WebRequestUpload.jsm": "toolkit/components/extensions/webrequest/WebRequestUpload.jsm",
- "resource://gre/modules/WebVTTParserWrapper.jsm": "dom/media/webvtt/WebVTTParserWrapper.jsm",
- "resource://gre/modules/WellKnownOpportunisticUtils.jsm": "netwerk/protocol/http/WellKnownOpportunisticUtils.jsm",
- "resource://gre/modules/WindowsRegistry.jsm": "toolkit/modules/WindowsRegistry.jsm",
- "resource://gre/modules/XPCOMUtils.jsm": "js/xpconnect/loader/XPCOMUtils.jsm",
- "resource://gre/modules/addonManager.js": "toolkit/mozapps/extensions/addonManager.js",
- "resource://gre/modules/addons/AddonRepository.jsm": "toolkit/mozapps/extensions/internal/AddonRepository.jsm",
- "resource://gre/modules/addons/AddonSettings.jsm": "toolkit/mozapps/extensions/internal/AddonSettings.jsm",
- "resource://gre/modules/addons/AddonUpdateChecker.jsm": "toolkit/mozapps/extensions/internal/AddonUpdateChecker.jsm",
- "resource://gre/modules/addons/GMPProvider.jsm": "toolkit/mozapps/extensions/internal/GMPProvider.jsm",
- "resource://gre/modules/addons/ProductAddonChecker.jsm": "toolkit/mozapps/extensions/internal/ProductAddonChecker.jsm",
- "resource://gre/modules/addons/XPIDatabase.jsm": "toolkit/mozapps/extensions/internal/XPIDatabase.jsm",
- "resource://gre/modules/addons/XPIInstall.jsm": "toolkit/mozapps/extensions/internal/XPIInstall.jsm",
- "resource://gre/modules/addons/XPIProvider.jsm": "toolkit/mozapps/extensions/internal/XPIProvider.jsm",
- "resource://gre/modules/amContentHandler.jsm": "toolkit/mozapps/extensions/amContentHandler.jsm",
- "resource://gre/modules/amInstallTrigger.jsm": "toolkit/mozapps/extensions/amInstallTrigger.jsm",
- "resource://gre/modules/amWebAPI.jsm": "toolkit/mozapps/extensions/amWebAPI.jsm",
- "resource://gre/modules/backgroundtasks/BackgroundTask_backgroundupdate.jsm": "toolkit/mozapps/update/BackgroundTask_backgroundupdate.jsm",
- "resource://gre/modules/components-utils/ClientEnvironment.jsm": "toolkit/components/utils/ClientEnvironment.jsm",
- "resource://gre/modules/components-utils/FilterExpressions.jsm": "toolkit/components/utils/FilterExpressions.jsm",
- "resource://gre/modules/components-utils/JsonSchemaValidator.jsm": "toolkit/components/utils/JsonSchemaValidator.jsm",
- "resource://gre/modules/components-utils/Sampling.jsm": "toolkit/components/utils/Sampling.jsm",
- "resource://gre/modules/components-utils/WindowsInstallsInfo.jsm": "toolkit/components/utils/WindowsInstallsInfo.jsm",
- "resource://gre/modules/components-utils/WindowsVersionInfo.jsm": "toolkit/components/utils/WindowsVersionInfo.jsm",
- "resource://gre/modules/components-utils/mozjexl.js": "toolkit/components/utils/mozjexl.js",
- "resource://gre/modules/crypto-SDR.js": "toolkit/components/passwordmgr/crypto-SDR.js",
- "resource://gre/modules/ctypes.jsm": "toolkit/components/ctypes/ctypes.jsm",
- "resource://gre/modules/handlers/HandlerList.jsm": "uriloader/exthandler/HandlerList.jsm",
- "resource://gre/modules/jsdebugger.jsm": "devtools/platform/jsdebugger.jsm",
- "resource://gre/modules/kvstore.jsm": "toolkit/components/kvstore/kvstore.jsm",
- "resource://gre/modules/lz4.js": "toolkit/components/lz4/lz4.js",
- "resource://gre/modules/lz4_internal.js": "toolkit/components/lz4/lz4_internal.js",
- "resource://gre/modules/media/IdpSandbox.jsm": "dom/media/IdpSandbox.jsm",
- "resource://gre/modules/media/PeerConnection.jsm": "dom/media/PeerConnection.jsm",
- "resource://gre/modules/media/PeerConnectionIdp.jsm": "dom/media/PeerConnectionIdp.jsm",
- "resource://gre/modules/mozIntl.jsm": "toolkit/components/mozintl/mozIntl.jsm",
- "resource://gre/modules/narrate/NarrateControls.jsm": "toolkit/components/narrate/NarrateControls.jsm",
- "resource://gre/modules/narrate/Narrator.jsm": "toolkit/components/narrate/Narrator.jsm",
- "resource://gre/modules/narrate/VoiceSelect.jsm": "toolkit/components/narrate/VoiceSelect.jsm",
- "resource://gre/modules/netwerk-dns/PublicSuffixList.jsm": "netwerk/dns/PublicSuffixList.jsm",
- "resource://gre/modules/nsAsyncShutdown.jsm": "toolkit/components/asyncshutdown/nsAsyncShutdown.jsm",
- "resource://gre/modules/nsCrashMonitor.jsm": "toolkit/components/crashmonitor/nsCrashMonitor.jsm",
- "resource://gre/modules/nsFormAutoCompleteResult.jsm": "toolkit/components/satchel/nsFormAutoCompleteResult.jsm",
- "resource://gre/modules/pdfjs.js": "toolkit/components/pdfjs/pdfjs.js",
- "resource://gre/modules/policies/WindowsGPOParser.jsm": "toolkit/components/enterprisepolicies/WindowsGPOParser.jsm",
- "resource://gre/modules/policies/macOSPoliciesParser.jsm": "toolkit/components/enterprisepolicies/macOSPoliciesParser.jsm",
- "resource://gre/modules/psm/DER.jsm": "security/manager/ssl/DER.jsm",
- "resource://gre/modules/psm/RemoteSecuritySettings.jsm": "security/manager/ssl/RemoteSecuritySettings.jsm",
- "resource://gre/modules/psm/X509.jsm": "security/manager/ssl/X509.jsm",
- "resource://gre/modules/reader/ReaderWorker.jsm": "toolkit/components/reader/ReaderWorker.jsm",
- "resource://gre/modules/reflect.jsm": "toolkit/components/reflect/reflect.jsm",
- "resource://gre/modules/remotepagemanager/MessagePort.jsm": "toolkit/components/remotepagemanager/MessagePort.jsm",
- "resource://gre/modules/remotepagemanager/RemotePageManagerChild.jsm": "toolkit/components/remotepagemanager/RemotePageManagerChild.jsm",
- "resource://gre/modules/remotepagemanager/RemotePageManagerParent.jsm": "toolkit/components/remotepagemanager/RemotePageManagerParent.jsm",
- "resource://gre/modules/services-automation/ServicesAutomation.jsm": "services/automation/ServicesAutomation.jsm",
- "resource://gre/modules/sessionstore/PrivacyFilter.jsm": "toolkit/modules/sessionstore/PrivacyFilter.jsm",
- "resource://gre/modules/sessionstore/PrivacyLevel.jsm": "toolkit/modules/sessionstore/PrivacyLevel.jsm",
- "resource://gre/modules/sessionstore/SessionHistory.jsm": "toolkit/modules/sessionstore/SessionHistory.jsm",
- "resource://gre/modules/sessionstore/Utils.jsm": "toolkit/modules/sessionstore/Utils.jsm",
- "resource://gre/modules/storage-geckoview.js": "toolkit/components/passwordmgr/storage-geckoview.js",
- "resource://gre/modules/storage-json.js": "toolkit/components/passwordmgr/storage-json.js",
- "resource://gre/modules/subprocess/subprocess_common.jsm": "toolkit/modules/subprocess/subprocess_common.jsm",
- "resource://gre/modules/subprocess/subprocess_unix.jsm": "toolkit/modules/subprocess/subprocess_unix.jsm",
- "resource://gre/modules/subprocess/subprocess_win.jsm": "toolkit/modules/subprocess/subprocess_win.jsm",
- "resource://gre/modules/third_party/fathom/fathom.jsm": "toolkit/modules/third_party/fathom/fathom.jsm",
- "resource://gre/modules/third_party/jsesc/jsesc.js": "toolkit/modules/third_party/jsesc/jsesc.js",
- "resource://gre/modules/translation/LanguageDetector.jsm": "toolkit/components/translation/LanguageDetector.jsm",
- "resource://gre/modules/txEXSLTRegExFunctions.jsm": "dom/xslt/xslt/txEXSLTRegExFunctions.jsm",
- "resource://gre/modules/vtt.jsm": "dom/media/webvtt/vtt.jsm",
- "resource://messaging-system/lib/Logger.jsm": "toolkit/components/messaging-system/lib/Logger.jsm",
- "resource://messaging-system/lib/SpecialMessageActions.jsm": "toolkit/components/messaging-system/lib/SpecialMessageActions.jsm",
- "resource://messaging-system/targeting/Targeting.jsm": "toolkit/components/messaging-system/targeting/Targeting.jsm",
- "resource://mozscreenshots/Screenshot.jsm": "browser/tools/mozscreenshots/mozscreenshots/extension/Screenshot.jsm",
- "resource://mozscreenshots/TestRunner.jsm": "browser/tools/mozscreenshots/mozscreenshots/extension/TestRunner.jsm",
- "resource://nimbus/ExperimentAPI.jsm": "toolkit/components/nimbus/ExperimentAPI.jsm",
- "resource://nimbus/lib/ExperimentManager.jsm": "toolkit/components/nimbus/lib/ExperimentManager.jsm",
- "resource://nimbus/lib/ExperimentStore.jsm": "toolkit/components/nimbus/lib/ExperimentStore.jsm",
- "resource://nimbus/lib/RemoteSettingsExperimentLoader.jsm": "toolkit/components/nimbus/lib/RemoteSettingsExperimentLoader.jsm",
- "resource://nimbus/lib/SharedDataMap.jsm": "toolkit/components/nimbus/lib/SharedDataMap.jsm",
- "resource://normandy-content/AboutPages.jsm": "toolkit/components/normandy/content/AboutPages.jsm",
- "resource://normandy-content/ShieldFrameChild.jsm": "toolkit/components/normandy/content/ShieldFrameChild.jsm",
- "resource://normandy-content/ShieldFrameParent.jsm": "toolkit/components/normandy/content/ShieldFrameParent.jsm",
- "resource://normandy-vendor/PropTypes.js": "toolkit/components/normandy/vendor/PropTypes.js",
- "resource://normandy-vendor/React.js": "toolkit/components/normandy/vendor/React.js",
- "resource://normandy-vendor/ReactDOM.js": "toolkit/components/normandy/vendor/ReactDOM.js",
- "resource://normandy-vendor/classnames.js": "toolkit/components/normandy/vendor/classnames.js",
- "resource://normandy/Normandy.jsm": "toolkit/components/normandy/Normandy.jsm",
- "resource://normandy/NormandyMigrations.jsm": "toolkit/components/normandy/NormandyMigrations.jsm",
- "resource://normandy/actions/AddonRollbackAction.jsm": "toolkit/components/normandy/actions/AddonRollbackAction.jsm",
- "resource://normandy/actions/AddonRolloutAction.jsm": "toolkit/components/normandy/actions/AddonRolloutAction.jsm",
- "resource://normandy/actions/BaseAction.jsm": "toolkit/components/normandy/actions/BaseAction.jsm",
- "resource://normandy/actions/BaseStudyAction.jsm": "toolkit/components/normandy/actions/BaseStudyAction.jsm",
- "resource://normandy/actions/BranchedAddonStudyAction.jsm": "toolkit/components/normandy/actions/BranchedAddonStudyAction.jsm",
- "resource://normandy/actions/ConsoleLogAction.jsm": "toolkit/components/normandy/actions/ConsoleLogAction.jsm",
- "resource://normandy/actions/MessagingExperimentAction.jsm": "toolkit/components/normandy/actions/MessagingExperimentAction.jsm",
- "resource://normandy/actions/PreferenceExperimentAction.jsm": "toolkit/components/normandy/actions/PreferenceExperimentAction.jsm",
- "resource://normandy/actions/PreferenceRollbackAction.jsm": "toolkit/components/normandy/actions/PreferenceRollbackAction.jsm",
- "resource://normandy/actions/PreferenceRolloutAction.jsm": "toolkit/components/normandy/actions/PreferenceRolloutAction.jsm",
- "resource://normandy/actions/ShowHeartbeatAction.jsm": "toolkit/components/normandy/actions/ShowHeartbeatAction.jsm",
- "resource://normandy/actions/schemas/index.js": "toolkit/components/normandy/actions/schemas/index.js",
- "resource://normandy/lib/ActionsManager.jsm": "toolkit/components/normandy/lib/ActionsManager.jsm",
- "resource://normandy/lib/AddonRollouts.jsm": "toolkit/components/normandy/lib/AddonRollouts.jsm",
- "resource://normandy/lib/AddonStudies.jsm": "toolkit/components/normandy/lib/AddonStudies.jsm",
- "resource://normandy/lib/CleanupManager.jsm": "toolkit/components/normandy/lib/CleanupManager.jsm",
- "resource://normandy/lib/ClientEnvironment.jsm": "toolkit/components/normandy/lib/ClientEnvironment.jsm",
- "resource://normandy/lib/EventEmitter.jsm": "toolkit/components/normandy/lib/EventEmitter.jsm",
- "resource://normandy/lib/Heartbeat.jsm": "toolkit/components/normandy/lib/Heartbeat.jsm",
- "resource://normandy/lib/LogManager.jsm": "toolkit/components/normandy/lib/LogManager.jsm",
- "resource://normandy/lib/NormandyAddonManager.jsm": "toolkit/components/normandy/lib/NormandyAddonManager.jsm",
- "resource://normandy/lib/NormandyApi.jsm": "toolkit/components/normandy/lib/NormandyApi.jsm",
- "resource://normandy/lib/NormandyUtils.jsm": "toolkit/components/normandy/lib/NormandyUtils.jsm",
- "resource://normandy/lib/PrefUtils.jsm": "toolkit/components/normandy/lib/PrefUtils.jsm",
- "resource://normandy/lib/PreferenceExperiments.jsm": "toolkit/components/normandy/lib/PreferenceExperiments.jsm",
- "resource://normandy/lib/PreferenceRollouts.jsm": "toolkit/components/normandy/lib/PreferenceRollouts.jsm",
- "resource://normandy/lib/RecipeRunner.jsm": "toolkit/components/normandy/lib/RecipeRunner.jsm",
- "resource://normandy/lib/ShieldPreferences.jsm": "toolkit/components/normandy/lib/ShieldPreferences.jsm",
- "resource://normandy/lib/Storage.jsm": "toolkit/components/normandy/lib/Storage.jsm",
- "resource://normandy/lib/TelemetryEvents.jsm": "toolkit/components/normandy/lib/TelemetryEvents.jsm",
- "resource://normandy/lib/Uptake.jsm": "toolkit/components/normandy/lib/Uptake.jsm",
- "resource://pdf.js/PdfJs.jsm": "toolkit/components/pdfjs/content/PdfJs.jsm",
- "resource://pdf.js/PdfJsDefaultPreferences.jsm": "toolkit/components/pdfjs/content/PdfJsDefaultPreferences.jsm",
- "resource://pdf.js/PdfJsNetwork.jsm": "toolkit/components/pdfjs/content/PdfJsNetwork.jsm",
- "resource://pdf.js/PdfJsTelemetry.jsm": "toolkit/components/pdfjs/content/PdfJsTelemetry.jsm",
- "resource://pdf.js/PdfSandbox.jsm": "toolkit/components/pdfjs/content/PdfSandbox.jsm",
- "resource://pdf.js/PdfStreamConverter.jsm": "toolkit/components/pdfjs/content/PdfStreamConverter.jsm",
- "resource://pdf.js/PdfjsChild.jsm": "toolkit/components/pdfjs/content/PdfjsChild.jsm",
- "resource://pdf.js/PdfjsParent.jsm": "toolkit/components/pdfjs/content/PdfjsParent.jsm",
- "resource://pdf.js/build/pdf.sandbox.external.js": "toolkit/components/pdfjs/content/build/pdf.sandbox.external.js",
- "resource://reftest/AsyncSpellCheckTestHelper.jsm": "editor/AsyncSpellCheckTestHelper.jsm",
- "resource://reftest/PerTestCoverageUtils.jsm": "tools/code-coverage/PerTestCoverageUtils.jsm",
- "resource://reftest/ReftestFissionChild.jsm": "layout/tools/reftest/ReftestFissionChild.jsm",
- "resource://reftest/ReftestFissionParent.jsm": "layout/tools/reftest/ReftestFissionParent.jsm",
- "resource://reftest/StructuredLog.jsm": "testing/modules/StructuredLog.jsm",
- "resource://reftest/globals.jsm": "layout/tools/reftest/globals.jsm",
- "resource://reftest/manifest.jsm": "layout/tools/reftest/manifest.jsm",
- "resource://reftest/reftest.jsm": "layout/tools/reftest/reftest.jsm",
- "resource://services-automation/ServicesAutomation.jsm": "services/automation/ServicesAutomation.jsm",
- "resource://services-common/async.js": "services/common/async.js",
- "resource://services-common/hawkclient.js": "services/common/hawkclient.js",
- "resource://services-common/hawkrequest.js": "services/common/hawkrequest.js",
- "resource://services-common/kinto-http-client.js": "services/common/kinto-http-client.js",
- "resource://services-common/kinto-offline-client.js": "services/common/kinto-offline-client.js",
- "resource://services-common/kinto-storage-adapter.js": "services/common/kinto-storage-adapter.js",
- "resource://services-common/logmanager.js": "services/common/logmanager.js",
- "resource://services-common/observers.js": "services/common/observers.js",
- "resource://services-common/rest.js": "services/common/rest.js",
- "resource://services-common/tokenserverclient.js": "services/common/tokenserverclient.js",
- "resource://services-common/uptake-telemetry.js": "services/common/uptake-telemetry.js",
- "resource://services-common/utils.js": "services/common/utils.js",
- "resource://services-crypto/WeaveCrypto.js": "services/crypto/modules/WeaveCrypto.js",
- "resource://services-crypto/jwcrypto.jsm": "services/crypto/modules/jwcrypto.jsm",
- "resource://services-crypto/utils.js": "services/crypto/modules/utils.js",
- "resource://services-settings/Attachments.jsm": "services/settings/Attachments.jsm",
- "resource://services-settings/Database.jsm": "services/settings/Database.jsm",
- "resource://services-settings/IDBHelpers.jsm": "services/settings/IDBHelpers.jsm",
- "resource://services-settings/RemoteSettingsClient.jsm": "services/settings/RemoteSettingsClient.jsm",
- "resource://services-settings/RemoteSettingsComponents.jsm": "services/settings/RemoteSettingsComponents.jsm",
- "resource://services-settings/RemoteSettingsWorker.jsm": "services/settings/RemoteSettingsWorker.jsm",
- "resource://services-settings/SharedUtils.jsm": "services/settings/SharedUtils.jsm",
- "resource://services-settings/SyncHistory.jsm": "services/settings/SyncHistory.jsm",
- "resource://services-settings/Utils.jsm": "services/settings/Utils.jsm",
- "resource://services-settings/remote-settings.js": "services/settings/remote-settings.js",
- "resource://services-sync/SyncDisconnect.jsm": "services/sync/modules/SyncDisconnect.jsm",
- "resource://services-sync/SyncedTabs.jsm": "services/sync/modules/SyncedTabs.jsm",
- "resource://services-sync/UIState.jsm": "services/sync/modules/UIState.jsm",
- "resource://services-sync/Weave.jsm": "services/sync/Weave.jsm",
- "resource://services-sync/addonsreconciler.js": "services/sync/modules/addonsreconciler.js",
- "resource://services-sync/addonutils.js": "services/sync/modules/addonutils.js",
- "resource://services-sync/bridged_engine.js": "services/sync/modules/bridged_engine.js",
- "resource://services-sync/collection_validator.js": "services/sync/modules/collection_validator.js",
- "resource://services-sync/constants.js": "services/sync/modules/constants.js",
- "resource://services-sync/doctor.js": "services/sync/modules/doctor.js",
- "resource://services-sync/engines.js": "services/sync/modules/engines.js",
- "resource://services-sync/engines/addons.js": "services/sync/modules/engines/addons.js",
- "resource://services-sync/engines/bookmarks.js": "services/sync/modules/engines/bookmarks.js",
- "resource://services-sync/engines/clients.js": "services/sync/modules/engines/clients.js",
- "resource://services-sync/engines/extension-storage.js": "services/sync/modules/engines/extension-storage.js",
- "resource://services-sync/engines/forms.js": "services/sync/modules/engines/forms.js",
- "resource://services-sync/engines/history.js": "services/sync/modules/engines/history.js",
- "resource://services-sync/engines/passwords.js": "services/sync/modules/engines/passwords.js",
- "resource://services-sync/engines/prefs.js": "services/sync/modules/engines/prefs.js",
- "resource://services-sync/engines/tabs.js": "services/sync/modules/engines/tabs.js",
- "resource://services-sync/keys.js": "services/sync/modules/keys.js",
- "resource://services-sync/main.js": "services/sync/modules/main.js",
- "resource://services-sync/policies.js": "services/sync/modules/policies.js",
- "resource://services-sync/record.js": "services/sync/modules/record.js",
- "resource://services-sync/resource.js": "services/sync/modules/resource.js",
- "resource://services-sync/service.js": "services/sync/modules/service.js",
- "resource://services-sync/stages/declined.js": "services/sync/modules/stages/declined.js",
- "resource://services-sync/stages/enginesync.js": "services/sync/modules/stages/enginesync.js",
- "resource://services-sync/status.js": "services/sync/modules/status.js",
- "resource://services-sync/sync_auth.js": "services/sync/modules/sync_auth.js",
- "resource://services-sync/telemetry.js": "services/sync/modules/telemetry.js",
- "resource://services-sync/util.js": "services/sync/modules/util.js",
- "resource://specialpowers/AppTestDelegate.jsm": "testing/specialpowers/content/AppTestDelegate.jsm",
- "resource://specialpowers/AppTestDelegateChild.jsm": "testing/specialpowers/content/AppTestDelegateChild.jsm",
- "resource://specialpowers/AppTestDelegateParent.jsm": "testing/specialpowers/content/AppTestDelegateParent.jsm",
- "resource://specialpowers/MockColorPicker.jsm": "testing/specialpowers/content/MockColorPicker.jsm",
- "resource://specialpowers/MockFilePicker.jsm": "testing/specialpowers/content/MockFilePicker.jsm",
- "resource://specialpowers/MockPermissionPrompt.jsm": "testing/specialpowers/content/MockPermissionPrompt.jsm",
- "resource://specialpowers/SpecialPowersChild.jsm": "testing/specialpowers/content/SpecialPowersChild.jsm",
- "resource://specialpowers/SpecialPowersEventUtils.jsm": "testing/specialpowers/content/SpecialPowersEventUtils.jsm",
- "resource://specialpowers/SpecialPowersParent.jsm": "testing/specialpowers/content/SpecialPowersParent.jsm",
- "resource://specialpowers/SpecialPowersSandbox.jsm": "testing/specialpowers/content/SpecialPowersSandbox.jsm",
- "resource://specialpowers/WrapPrivileged.jsm": "testing/specialpowers/content/WrapPrivileged.jsm",
- "resource://talos-powers/TalosParentProfiler.jsm": "testing/talos/talos/talos-powers/content/TalosParentProfiler.jsm",
- "resource://test/AllowJavascriptChild.jsm": "docshell/test/unit/AllowJavascriptChild.jsm",
- "resource://test/AllowJavascriptParent.jsm": "docshell/test/unit/AllowJavascriptParent.jsm",
- "resource://test/Census.jsm": "devtools/shared/heapsnapshot/tests/xpcshell/Census.jsm",
- "resource://test/CrashTestUtils.jsm": "toolkit/crashreporter/test/CrashTestUtils.jsm",
- "resource://test/GlobalObjectsModule.jsm": "dom/indexedDB/test/unit/GlobalObjectsModule.jsm",
- "resource://test/Match.jsm": "devtools/shared/heapsnapshot/tests/xpcshell/Match.jsm",
- "resource://test/TestRunner.jsm": "browser/tools/mozscreenshots/mozscreenshots/extension/TestRunner.jsm",
- "resource://test/broadcast_handler.jsm": "dom/push/test/xpcshell/broadcast_handler.jsm",
- "resource://testing-common/AddonTestUtils.jsm": "toolkit/mozapps/extensions/internal/AddonTestUtils.jsm",
- "resource://testing-common/AppData.jsm": "testing/modules/AppData.jsm",
- "resource://testing-common/AppInfo.jsm": "testing/modules/AppInfo.jsm",
- "resource://testing-common/Assert.jsm": "testing/modules/Assert.jsm",
- "resource://testing-common/AsyncSpellCheckTestHelper.jsm": "editor/AsyncSpellCheckTestHelper.jsm",
- "resource://testing-common/BackgroundTasksTestUtils.jsm": "toolkit/components/backgroundtasks/BackgroundTasksTestUtils.jsm",
- "resource://testing-common/BrowserTestUtils.jsm": "testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm",
- "resource://testing-common/BrowserTestUtilsChild.jsm": "testing/mochitest/BrowserTestUtils/BrowserTestUtilsChild.jsm",
- "resource://testing-common/BrowserTestUtilsParent.jsm": "testing/mochitest/BrowserTestUtils/BrowserTestUtilsParent.jsm",
- "resource://testing-common/ContentEventListenerChild.jsm": "testing/mochitest/BrowserTestUtils/ContentEventListenerChild.jsm",
- "resource://testing-common/ContentEventListenerParent.jsm": "testing/mochitest/BrowserTestUtils/ContentEventListenerParent.jsm",
- "resource://testing-common/ContentTask.jsm": "testing/mochitest/BrowserTestUtils/ContentTask.jsm",
- "resource://testing-common/ContentTaskUtils.jsm": "testing/mochitest/BrowserTestUtils/ContentTaskUtils.jsm",
- "resource://testing-common/CookieXPCShellUtils.jsm": "netwerk/cookie/CookieXPCShellUtils.jsm",
- "resource://testing-common/CoverageUtils.jsm": "testing/modules/CoverageUtils.jsm",
- "resource://testing-common/CrashManagerTest.jsm": "toolkit/components/crashes/CrashManagerTest.jsm",
- "resource://testing-common/CustomizableUITestUtils.jsm": "browser/components/customizableui/test/CustomizableUITestUtils.jsm",
- "resource://testing-common/DoHTestUtils.jsm": "browser/components/doh/DoHTestUtils.jsm",
- "resource://testing-common/EnterprisePolicyTesting.jsm": "toolkit/components/enterprisepolicies/tests/EnterprisePolicyTesting.jsm",
- "resource://testing-common/ExtensionTestCommon.jsm": "toolkit/components/extensions/ExtensionTestCommon.jsm",
- "resource://testing-common/ExtensionXPCShellUtils.jsm": "toolkit/components/extensions/ExtensionXPCShellUtils.jsm",
- "resource://testing-common/FileTestUtils.jsm": "testing/modules/FileTestUtils.jsm",
- "resource://testing-common/FluentSyntax.jsm": "intl/l10n/FluentSyntax.jsm",
- "resource://testing-common/FormHistoryTestUtils.jsm": "toolkit/components/satchel/test/FormHistoryTestUtils.jsm",
- "resource://testing-common/HandlerServiceTestUtils.jsm": "uriloader/exthandler/tests/HandlerServiceTestUtils.jsm",
- "resource://testing-common/LangPackMatcherTestUtils.jsm": "intl/locale/tests/LangPackMatcherTestUtils.jsm",
- "resource://testing-common/LoginTestUtils.jsm": "toolkit/components/passwordmgr/test/LoginTestUtils.jsm",
- "resource://testing-common/MessageChannel.jsm": "toolkit/components/extensions/MessageChannel.jsm",
- "resource://testing-common/MockDocument.jsm": "toolkit/modules/tests/modules/MockDocument.jsm",
- "resource://testing-common/MockFilePicker.jsm": "testing/specialpowers/content/MockFilePicker.jsm",
- "resource://testing-common/MockRegistrar.jsm": "testing/modules/MockRegistrar.jsm",
- "resource://testing-common/MockRegistry.jsm": "testing/modules/MockRegistry.jsm",
- "resource://testing-common/NimbusTestUtils.jsm": "toolkit/components/nimbus/test/NimbusTestUtils.jsm",
- "resource://testing-common/NormandyTestUtils.jsm": "toolkit/components/normandy/test/NormandyTestUtils.jsm",
- "resource://testing-common/OSKeyStoreTestUtils.jsm": "toolkit/modules/tests/modules/OSKeyStoreTestUtils.jsm",
- "resource://testing-common/PerTestCoverageUtils.jsm": "tools/code-coverage/PerTestCoverageUtils.jsm",
- "resource://testing-common/PermissionTestUtils.jsm": "extensions/permissions/test/PermissionTestUtils.jsm",
- "resource://testing-common/PlacesTestUtils.jsm": "toolkit/components/places/tests/PlacesTestUtils.jsm",
- "resource://testing-common/PromiseTestUtils.jsm": "toolkit/modules/tests/modules/PromiseTestUtils.jsm",
- "resource://testing-common/PromptTestUtils.jsm": "toolkit/components/prompts/test/PromptTestUtils.jsm",
- "resource://testing-common/QuickSuggestTestUtils.jsm": "browser/components/urlbar/tests/quicksuggest/QuickSuggestTestUtils.jsm",
- "resource://testing-common/RegionTestUtils.jsm": "toolkit/modules/tests/xpcshell/RegionTestUtils.jsm",
- "resource://testing-common/SearchTestUtils.jsm": "toolkit/components/search/tests/SearchTestUtils.jsm",
- "resource://testing-common/Sinon.jsm": "testing/modules/Sinon.jsm",
- "resource://testing-common/SiteDataTestUtils.jsm": "toolkit/components/cleardata/SiteDataTestUtils.jsm",
- "resource://testing-common/StructuredLog.jsm": "testing/modules/StructuredLog.jsm",
- "resource://testing-common/TelemetryArchiveTesting.jsm": "toolkit/components/telemetry/tests/unit/TelemetryArchiveTesting.jsm",
- "resource://testing-common/TelemetryEnvironmentTesting.jsm": "toolkit/components/telemetry/tests/unit/TelemetryEnvironmentTesting.jsm",
- "resource://testing-common/TelemetryTestUtils.jsm": "toolkit/components/telemetry/tests/utils/TelemetryTestUtils.jsm",
- "resource://testing-common/TestIntegration.jsm": "toolkit/modules/tests/xpcshell/TestIntegration.jsm",
- "resource://testing-common/TestInterfaceJS.jsm": "dom/bindings/test/TestInterfaceJS.jsm",
- "resource://testing-common/TestProcessActorChild.jsm": "toolkit/actors/TestProcessActorChild.jsm",
- "resource://testing-common/TestProcessActorParent.jsm": "toolkit/actors/TestProcessActorParent.jsm",
- "resource://testing-common/TestUtils.jsm": "testing/modules/TestUtils.jsm",
- "resource://testing-common/TestWindowChild.jsm": "toolkit/actors/TestWindowChild.jsm",
- "resource://testing-common/TestWindowParent.jsm": "toolkit/actors/TestWindowParent.jsm",
- "resource://testing-common/UrlClassifierTestUtils.jsm": "toolkit/components/url-classifier/tests/UrlClassifierTestUtils.jsm",
- "resource://testing-common/UrlbarTestUtils.jsm": "browser/components/urlbar/tests/UrlbarTestUtils.jsm",
- "resource://testing-common/XPCShellContentUtils.jsm": "testing/modules/XPCShellContentUtils.jsm",
- "resource://testing-common/backgroundtasks/BackgroundTask_automaticrestart.jsm": "toolkit/components/backgroundtasks/tests/BackgroundTask_automaticrestart.jsm",
- "resource://testing-common/backgroundtasks/BackgroundTask_shouldprocessupdates.jsm": "toolkit/components/backgroundtasks/tests/BackgroundTask_shouldprocessupdates.jsm",
- "resource://testing-common/backgroundtasks/BackgroundTask_wait.jsm": "toolkit/components/backgroundtasks/tests/BackgroundTask_wait.jsm",
- "resource://testing-common/cookie_filtering_helper.jsm": "netwerk/test/browser/cookie_filtering_helper.jsm",
- "resource://testing-common/dom/quota/test/modules/ModuleLoader.jsm": "dom/quota/test/modules/system/ModuleLoader.jsm",
- "resource://testing-common/dom/quota/test/modules/StorageUtils.jsm": "dom/quota/test/modules/system/StorageUtils.jsm",
- "resource://testing-common/dom/quota/test/modules/WorkerDriver.jsm": "dom/quota/test/modules/system/WorkerDriver.jsm",
- "resource://testing-common/early_hint_preload_test_helper.jsm": "netwerk/test/browser/early_hint_preload_test_helper.jsm",
- "resource://testing-common/httpd.js": "netwerk/test/httpserver/httpd.js",
- "resource://testing-common/services/common/logging.js": "services/common/modules-testing/logging.js",
- "resource://testing-common/services/sync/fakeservices.js": "services/sync/modules-testing/fakeservices.js",
- "resource://testing-common/services/sync/fxa_utils.js": "services/sync/modules-testing/fxa_utils.js",
- "resource://testing-common/services/sync/rotaryengine.js": "services/sync/modules-testing/rotaryengine.js",
- "resource://testing-common/services/sync/utils.js": "services/sync/modules-testing/utils.js",
- "resource://tps/auth/fxaccounts.jsm": "services/sync/tps/extensions/tps/resource/auth/fxaccounts.jsm",
- "resource://tps/logger.jsm": "services/sync/tps/extensions/tps/resource/logger.jsm",
- "resource://tps/modules/addons.jsm": "services/sync/tps/extensions/tps/resource/modules/addons.jsm",
- "resource://tps/modules/bookmarkValidator.jsm": "services/sync/tps/extensions/tps/resource/modules/bookmarkValidator.jsm",
- "resource://tps/modules/bookmarks.jsm": "services/sync/tps/extensions/tps/resource/modules/bookmarks.jsm",
- "resource://tps/modules/formautofill.jsm": "services/sync/tps/extensions/tps/resource/modules/formautofill.jsm",
- "resource://tps/modules/forms.jsm": "services/sync/tps/extensions/tps/resource/modules/forms.jsm",
- "resource://tps/modules/history.jsm": "services/sync/tps/extensions/tps/resource/modules/history.jsm",
- "resource://tps/modules/passwords.jsm": "services/sync/tps/extensions/tps/resource/modules/passwords.jsm",
- "resource://tps/modules/prefs.jsm": "services/sync/tps/extensions/tps/resource/modules/prefs.jsm",
- "resource://tps/modules/tabs.jsm": "services/sync/tps/extensions/tps/resource/modules/tabs.jsm",
- "resource://tps/modules/windows.jsm": "services/sync/tps/extensions/tps/resource/modules/windows.jsm",
- "resource://tps/quit.js": "services/sync/tps/extensions/tps/resource/quit.js",
- "resource://tps/tps.jsm": "services/sync/tps/extensions/tps/resource/tps.jsm",
- "resource://webcompat/AboutCompat.jsm": "browser/extensions/webcompat/about-compat/AboutCompat.jsm",
- "resource://testing-common/PerfTestHelpers.jsm": "browser/base/content/test/performance/PerfTestHelpers.jsm",
- "resource:///modules/QuickActionsLoaderDefault.jsm": "browser/components/urlbar/QuickActionsLoaderDefault.jsm",
- "resource:///modules/UrlbarProviderQuickActions.jsm": "browser/components/urlbar/UrlbarProviderQuickActions.jsm",
- "resource://gre/modules/UrlClassifierRemoteSettingsService.jsm": "toolkit/components/url-classifier/UrlClassifierRemoteSettingsService.jsm",
-
- "resource:///modules/BrowserUsageTelemetry.jsm": [
- "browser/modules/BrowserUsageTelemetry.jsm",
- "mobile/android/modules/geckoview/BrowserUsageTelemetry.jsm"
- ],
- "resource:///modules/ExtensionBrowsingData.jsm": [
- "browser/components/extensions/ExtensionBrowsingData.jsm",
- "mobile/android/components/extensions/ExtensionBrowsingData.jsm"
- ],
- "resource://autofill/FormAutofillPrompter.jsm": [
- "toolkit/components/formautofill/android/FormAutofillPrompter.jsm",
- "toolkit/components/formautofill/default/FormAutofillPrompter.jsm"
- ],
- "resource://autofill/FormAutofillStorage.jsm": [
- "toolkit/components/formautofill/android/FormAutofillStorage.jsm",
- "toolkit/components/formautofill/default/FormAutofillStorage.jsm"
- ],
- "resource://gre/modules/NotificationDB.jsm": [
- "dom/notification/new/NotificationDB.jsm",
- "dom/notification/old/NotificationDB.jsm"
- ],
- "resource://gre/modules/XULStore.jsm": [
- "toolkit/components/xulstore/new/XULStore.jsm",
- "toolkit/components/xulstore/old/XULStore.jsm"
- ],
- "resource://testing-common/AppUiTestDelegate.jsm": [
- "browser/components/extensions/test/AppUiTestDelegate.jsm",
- "mobile/android/modules/test/AppUiTestDelegate.jsm"
- ]
-}
diff --git a/tools/esmify/package-lock.json b/tools/esmify/package-lock.json
deleted file mode 100644
index dea539947b..0000000000
--- a/tools/esmify/package-lock.json
+++ /dev/null
@@ -1,7895 +0,0 @@
-{
- "name": "esmify",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "devDependencies": {
- "jscodeshift": "^0.13.1"
- }
- },
- "node_modules/@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
- "dev": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.1.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz",
- "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz",
- "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==",
- "dev": true,
- "dependencies": {
- "@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.18.6",
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helpers": "^7.18.6",
- "@babel/parser": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.1",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.6.tgz",
- "integrity": "sha512-AIwwoOS8axIC5MZbhNHRLKi3D+DMpvDf9XUcu3pIVAfOHFT45f4AoDAltRbHIQomCipkCZxrNkfpOEHhJz/VKw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6",
- "@jridgewell/gen-mapping": "^0.3.0",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
- "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz",
- "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-explode-assignable-expression": "^7.18.6",
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz",
- "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.20.2",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz",
- "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-function-name": "^7.18.6",
- "@babel/helper-member-expression-to-functions": "^7.18.6",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
- "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
- "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.13.0",
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-plugin-utils": "^7.13.0",
- "@babel/traverse": "^7.13.0",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0-0"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz",
- "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-explode-assignable-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
- "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz",
- "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.18.6",
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz",
- "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz",
- "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
- "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz",
- "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz",
- "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-wrap-function": "^7.18.6",
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz",
- "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-member-expression-to-functions": "^7.18.6",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz",
- "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
- "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
- "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-wrap-function": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz",
- "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-function-name": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz",
- "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz",
- "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==",
- "dev": true,
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
- "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz",
- "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6",
- "@babel/plugin-proposal-optional-chaining": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.13.0"
- }
- },
- "node_modules/@babel/plugin-proposal-async-generator-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz",
- "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-remap-async-to-generator": "^7.18.6",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-class-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
- "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-class-static-block": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz",
- "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.12.0"
- }
- },
- "node_modules/@babel/plugin-proposal-dynamic-import": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
- "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-export-namespace-from": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz",
- "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-json-strings": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
- "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz",
- "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
- "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-numeric-separator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
- "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz",
- "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/compat-data": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
- "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-optional-chaining": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz",
- "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-private-methods": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
- "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
- "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
- "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
- "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-flow": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz",
- "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
- "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
- "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz",
- "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz",
- "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-remap-async-to-generator": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
- "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz",
- "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-classes": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz",
- "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-function-name": "^7.18.6",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz",
- "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz",
- "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
- "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz",
- "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
- "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-flow-strip-types": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.6.tgz",
- "integrity": "sha512-wE0xtA7csz+hw4fKPwxmu5jnzAsXPIO57XnRwzXP3T19jWh1BODnPGoG9xKYwvAwusP7iUktHayRFbMPGtODaQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-flow": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-for-of": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz",
- "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-function-name": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz",
- "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.18.6",
- "@babel/helper-function-name": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz",
- "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
- "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
- "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
- "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz",
- "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
- "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
- "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-new-target": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
- "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-object-super": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
- "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-parameters": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz",
- "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
- "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
- "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "regenerator-transform": "^0.15.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
- "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
- "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-spread": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz",
- "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
- "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz",
- "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz",
- "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.6.tgz",
- "integrity": "sha512-ijHNhzIrLj5lQCnI6aaNVRtGVuUZhOXFLRVFs7lLrkXTHip4FKty5oAuQdk4tywG0/WjXmjTfQCWmuzrvFer1w==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-typescript": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz",
- "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
- "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-env": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.6.tgz",
- "integrity": "sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/compat-data": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6",
- "@babel/plugin-proposal-async-generator-functions": "^7.18.6",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-class-static-block": "^7.18.6",
- "@babel/plugin-proposal-dynamic-import": "^7.18.6",
- "@babel/plugin-proposal-export-namespace-from": "^7.18.6",
- "@babel/plugin-proposal-json-strings": "^7.18.6",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
- "@babel/plugin-proposal-numeric-separator": "^7.18.6",
- "@babel/plugin-proposal-object-rest-spread": "^7.18.6",
- "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
- "@babel/plugin-proposal-optional-chaining": "^7.18.6",
- "@babel/plugin-proposal-private-methods": "^7.18.6",
- "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
- "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.18.6",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-transform-arrow-functions": "^7.18.6",
- "@babel/plugin-transform-async-to-generator": "^7.18.6",
- "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
- "@babel/plugin-transform-block-scoping": "^7.18.6",
- "@babel/plugin-transform-classes": "^7.18.6",
- "@babel/plugin-transform-computed-properties": "^7.18.6",
- "@babel/plugin-transform-destructuring": "^7.18.6",
- "@babel/plugin-transform-dotall-regex": "^7.18.6",
- "@babel/plugin-transform-duplicate-keys": "^7.18.6",
- "@babel/plugin-transform-exponentiation-operator": "^7.18.6",
- "@babel/plugin-transform-for-of": "^7.18.6",
- "@babel/plugin-transform-function-name": "^7.18.6",
- "@babel/plugin-transform-literals": "^7.18.6",
- "@babel/plugin-transform-member-expression-literals": "^7.18.6",
- "@babel/plugin-transform-modules-amd": "^7.18.6",
- "@babel/plugin-transform-modules-commonjs": "^7.18.6",
- "@babel/plugin-transform-modules-systemjs": "^7.18.6",
- "@babel/plugin-transform-modules-umd": "^7.18.6",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6",
- "@babel/plugin-transform-new-target": "^7.18.6",
- "@babel/plugin-transform-object-super": "^7.18.6",
- "@babel/plugin-transform-parameters": "^7.18.6",
- "@babel/plugin-transform-property-literals": "^7.18.6",
- "@babel/plugin-transform-regenerator": "^7.18.6",
- "@babel/plugin-transform-reserved-words": "^7.18.6",
- "@babel/plugin-transform-shorthand-properties": "^7.18.6",
- "@babel/plugin-transform-spread": "^7.18.6",
- "@babel/plugin-transform-sticky-regex": "^7.18.6",
- "@babel/plugin-transform-template-literals": "^7.18.6",
- "@babel/plugin-transform-typeof-symbol": "^7.18.6",
- "@babel/plugin-transform-unicode-escapes": "^7.18.6",
- "@babel/plugin-transform-unicode-regex": "^7.18.6",
- "@babel/preset-modules": "^0.1.5",
- "@babel/types": "^7.18.6",
- "babel-plugin-polyfill-corejs2": "^0.3.1",
- "babel-plugin-polyfill-corejs3": "^0.5.2",
- "babel-plugin-polyfill-regenerator": "^0.3.1",
- "core-js-compat": "^3.22.1",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-flow": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz",
- "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-transform-flow-strip-types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-modules": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
- "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
- "@babel/plugin-transform-dotall-regex": "^7.4.4",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
- "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-transform-typescript": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/register": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.6.tgz",
- "integrity": "sha512-tkYtONzaO8rQubZzpBnvZPFcHgh8D9F55IjOsYton4X2IBoyRn2ZSWQqySTZnUn2guZbxbQiAB27hJEbvXamhQ==",
- "dev": true,
- "dependencies": {
- "clone-deep": "^4.0.1",
- "find-cache-dir": "^2.0.0",
- "make-dir": "^2.1.0",
- "pirates": "^4.0.5",
- "source-map-support": "^0.5.16"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz",
- "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "regenerator-runtime": "^0.13.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
- "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.18.6",
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz",
- "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-function-name": "^7.18.6",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.18.6",
- "@babel/types": "^7.18.6",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.6.tgz",
- "integrity": "sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz",
- "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
- "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ast-types": {
- "version": "0.14.2",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz",
- "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true,
- "bin": {
- "atob": "bin/atob.js"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
- "node_modules/babel-core": {
- "version": "7.0.0-bridge.0",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
- "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
- "dev": true,
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/babel-plugin-dynamic-import-node": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
- "dev": true,
- "dependencies": {
- "object.assign": "^4.1.0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
- "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/compat-data": "^7.13.11",
- "@babel/helper-define-polyfill-provider": "^0.3.1",
- "semver": "^6.1.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz",
- "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.3.1",
- "core-js-compat": "^3.21.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
- "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.3.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "dependencies": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/braces/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/browserslist": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz",
- "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001358",
- "electron-to-chromium": "^1.4.164",
- "node-releases": "^2.0.5",
- "update-browserslist-db": "^1.0.0"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "node_modules/cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "dependencies": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001359",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz",
- "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- }
- ]
- },
- "node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "dependencies": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
- "dev": true,
- "dependencies": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true
- },
- "node_modules/component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
- },
- "node_modules/copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/core-js-compat": {
- "version": "3.23.3",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz",
- "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "browserslist": "^4.21.0",
- "semver": "7.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-js-compat/node_modules/semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true,
- "peer": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/define-properties": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
- "dev": true,
- "dependencies": {
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.172",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.172.tgz",
- "integrity": "sha512-yDoFfTJnqBAB6hSiPvzmsBJSrjOXJtHSJoqJdI/zSIh7DYupYnIOHt/bbPw/WE31BJjNTybDdNAs21gCMnTh0Q==",
- "dev": true
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
- "dev": true,
- "dependencies": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/expand-brackets/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
- "dev": true,
- "dependencies": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "dependencies": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fill-range/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/flow-parser": {
- "version": "0.181.1",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.181.1.tgz",
- "integrity": "sha512-+Mx87/GkmF5+FHk8IXc5WppD/oC4wB+05MuIv7qmIMgThND3RhOBGl7Npyc2L7NLVenme00ZlwEKVieiMz4bqA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
- "dev": true,
- "dependencies": {
- "map-cache": "^0.2.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
- "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "dev": true
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.1.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
- "dev": true,
- "dependencies": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/is-core-module": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "node_modules/jscodeshift": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz",
- "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.13.16",
- "@babel/parser": "^7.13.16",
- "@babel/plugin-proposal-class-properties": "^7.13.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8",
- "@babel/plugin-proposal-optional-chaining": "^7.13.12",
- "@babel/plugin-transform-modules-commonjs": "^7.13.8",
- "@babel/preset-flow": "^7.13.13",
- "@babel/preset-typescript": "^7.13.0",
- "@babel/register": "^7.13.16",
- "babel-core": "^7.0.0-bridge.0",
- "chalk": "^4.1.2",
- "flow-parser": "0.*",
- "graceful-fs": "^4.2.4",
- "micromatch": "^3.1.10",
- "neo-async": "^2.5.0",
- "node-dir": "^0.1.17",
- "recast": "^0.20.4",
- "temp": "^0.8.4",
- "write-file-atomic": "^2.3.0"
- },
- "bin": {
- "jscodeshift": "bin/jscodeshift.js"
- },
- "peerDependencies": {
- "@babel/preset-env": "^7.1.6"
- }
- },
- "node_modules/jscodeshift/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jscodeshift/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jscodeshift/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jscodeshift/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jscodeshift/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jscodeshift/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
- "dev": true,
- "peer": true
- },
- "node_modules/make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
- "dev": true,
- "dependencies": {
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "dependencies": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "node_modules/node-dir": {
- "version": "0.1.17",
- "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
- "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==",
- "dev": true,
- "dependencies": {
- "minimatch": "^3.0.2"
- },
- "engines": {
- "node": ">= 0.10.5"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
- "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
- "dev": true
- },
- "node_modules/object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
- "dev": true,
- "dependencies": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "peer": true
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/recast": {
- "version": "0.20.5",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz",
- "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==",
- "dev": true,
- "dependencies": {
- "ast-types": "0.14.2",
- "esprima": "~4.0.0",
- "source-map": "~0.6.1",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
- "dev": true,
- "peer": true
- },
- "node_modules/regenerate-unicode-properties": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
- "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "regenerate": "^1.4.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.13.9",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
- "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
- "dev": true,
- "peer": true
- },
- "node_modules/regenerator-transform": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
- "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@babel/runtime": "^7.8.4"
- }
- },
- "node_modules/regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/regexpu-core": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
- "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.0.1",
- "regjsgen": "^0.6.0",
- "regjsparser": "^0.8.2",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regjsgen": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
- "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
- "dev": true,
- "peer": true
- },
- "node_modules/regjsparser": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
- "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "jsesc": "~0.5.0"
- },
- "bin": {
- "regjsparser": "bin/parser"
- }
- },
- "node_modules/regjsparser/node_modules/jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
- "dev": true,
- "peer": true,
- "bin": {
- "jsesc": "bin/jsesc"
- }
- },
- "node_modules/repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
- "deprecated": "https://github.com/lydell/resolve-url#deprecated",
- "dev": true
- },
- "node_modules/ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
- "dev": true,
- "dependencies": {
- "ret": "~0.1.10"
- }
- },
- "node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "node_modules/snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "dependencies": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "dependencies": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/snapdragon/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/snapdragon/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
- "dev": true,
- "dependencies": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
- "dev": true
- },
- "node_modules/split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
- "dev": true,
- "dependencies": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/temp": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz",
- "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==",
- "dev": true,
- "dependencies": {
- "rimraf": "~2.6.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-object-path/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "dependencies": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
- "dev": true
- },
- "node_modules/unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
- "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "dependencies": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/union-value/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
- "dev": true,
- "dependencies": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
- "dev": true,
- "dependencies": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
- "dev": true,
- "dependencies": {
- "isarray": "1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz",
- "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "browserslist-lint": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
- "deprecated": "Please see https://github.com/lydell/urix#deprecated",
- "dev": true
- },
- "node_modules/use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- }
- },
- "dependencies": {
- "@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.1.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.18.6"
- }
- },
- "@babel/compat-data": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz",
- "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==",
- "dev": true
- },
- "@babel/core": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz",
- "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.18.6",
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helpers": "^7.18.6",
- "@babel/parser": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.1",
- "semver": "^6.3.0"
- }
- },
- "@babel/generator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.6.tgz",
- "integrity": "sha512-AIwwoOS8axIC5MZbhNHRLKi3D+DMpvDf9XUcu3pIVAfOHFT45f4AoDAltRbHIQomCipkCZxrNkfpOEHhJz/VKw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6",
- "@jridgewell/gen-mapping": "^0.3.0",
- "jsesc": "^2.5.1"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
- }
- },
- "@babel/helper-annotate-as-pure": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
- "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz",
- "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-explode-assignable-expression": "^7.18.6",
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz",
- "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.20.2",
- "semver": "^6.3.0"
- }
- },
- "@babel/helper-create-class-features-plugin": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz",
- "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-function-name": "^7.18.6",
- "@babel/helper-member-expression-to-functions": "^7.18.6",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6"
- }
- },
- "@babel/helper-create-regexp-features-plugin": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
- "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.1.0"
- }
- },
- "@babel/helper-define-polyfill-provider": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
- "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.13.0",
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-plugin-utils": "^7.13.0",
- "@babel/traverse": "^7.13.0",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz",
- "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==",
- "dev": true
- },
- "@babel/helper-explode-assignable-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
- "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz",
- "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.18.6",
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz",
- "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz",
- "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
- "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz",
- "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==",
- "dev": true
- },
- "@babel/helper-remap-async-to-generator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz",
- "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-wrap-function": "^7.18.6",
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz",
- "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-member-expression-to-functions": "^7.18.6",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz",
- "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
- "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
- "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
- "dev": true
- },
- "@babel/helper-wrap-function": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz",
- "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-function-name": "^7.18.6",
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helpers": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz",
- "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.18.6",
- "@babel/traverse": "^7.18.6",
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz",
- "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==",
- "dev": true
- },
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
- "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz",
- "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6",
- "@babel/plugin-proposal-optional-chaining": "^7.18.6"
- }
- },
- "@babel/plugin-proposal-async-generator-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz",
- "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-remap-async-to-generator": "^7.18.6",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
- }
- },
- "@babel/plugin-proposal-class-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
- "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-proposal-class-static-block": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz",
- "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-dynamic-import": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
- "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-export-namespace-from": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz",
- "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-json-strings": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
- "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz",
- "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
- }
- },
- "@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
- "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-numeric-separator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
- "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
- }
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz",
- "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/compat-data": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.18.6"
- }
- },
- "@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
- "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-optional-chaining": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz",
- "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-private-methods": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
- "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-proposal-private-property-in-object": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
- "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
- "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.12.13"
- }
- },
- "@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
- "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-flow": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz",
- "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-syntax-import-assertions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
- "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
- "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-arrow-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz",
- "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz",
- "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-remap-async-to-generator": "^7.18.6"
- }
- },
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
- "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz",
- "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz",
- "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-function-name": "^7.18.6",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "globals": "^11.1.0"
- }
- },
- "@babel/plugin-transform-computed-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz",
- "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz",
- "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-dotall-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
- "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-duplicate-keys": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz",
- "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-exponentiation-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
- "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-flow-strip-types": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.6.tgz",
- "integrity": "sha512-wE0xtA7csz+hw4fKPwxmu5jnzAsXPIO57XnRwzXP3T19jWh1BODnPGoG9xKYwvAwusP7iUktHayRFbMPGtODaQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-flow": "^7.18.6"
- }
- },
- "@babel/plugin-transform-for-of": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz",
- "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-function-name": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz",
- "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.18.6",
- "@babel/helper-function-name": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz",
- "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
- "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
- "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- }
- },
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
- "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- }
- },
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz",
- "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
- "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
- "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-new-target": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
- "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-object-super": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
- "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6"
- }
- },
- "@babel/plugin-transform-parameters": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz",
- "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-property-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
- "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-regenerator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
- "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "regenerator-transform": "^0.15.0"
- }
- },
- "@babel/plugin-transform-reserved-words": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
- "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-shorthand-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
- "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-spread": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz",
- "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6"
- }
- },
- "@babel/plugin-transform-sticky-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
- "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-template-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz",
- "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-typeof-symbol": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz",
- "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.6.tgz",
- "integrity": "sha512-ijHNhzIrLj5lQCnI6aaNVRtGVuUZhOXFLRVFs7lLrkXTHip4FKty5oAuQdk4tywG0/WjXmjTfQCWmuzrvFer1w==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-typescript": "^7.18.6"
- }
- },
- "@babel/plugin-transform-unicode-escapes": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz",
- "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-unicode-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
- "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/preset-env": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.6.tgz",
- "integrity": "sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/compat-data": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6",
- "@babel/plugin-proposal-async-generator-functions": "^7.18.6",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-class-static-block": "^7.18.6",
- "@babel/plugin-proposal-dynamic-import": "^7.18.6",
- "@babel/plugin-proposal-export-namespace-from": "^7.18.6",
- "@babel/plugin-proposal-json-strings": "^7.18.6",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
- "@babel/plugin-proposal-numeric-separator": "^7.18.6",
- "@babel/plugin-proposal-object-rest-spread": "^7.18.6",
- "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
- "@babel/plugin-proposal-optional-chaining": "^7.18.6",
- "@babel/plugin-proposal-private-methods": "^7.18.6",
- "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
- "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.18.6",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-transform-arrow-functions": "^7.18.6",
- "@babel/plugin-transform-async-to-generator": "^7.18.6",
- "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
- "@babel/plugin-transform-block-scoping": "^7.18.6",
- "@babel/plugin-transform-classes": "^7.18.6",
- "@babel/plugin-transform-computed-properties": "^7.18.6",
- "@babel/plugin-transform-destructuring": "^7.18.6",
- "@babel/plugin-transform-dotall-regex": "^7.18.6",
- "@babel/plugin-transform-duplicate-keys": "^7.18.6",
- "@babel/plugin-transform-exponentiation-operator": "^7.18.6",
- "@babel/plugin-transform-for-of": "^7.18.6",
- "@babel/plugin-transform-function-name": "^7.18.6",
- "@babel/plugin-transform-literals": "^7.18.6",
- "@babel/plugin-transform-member-expression-literals": "^7.18.6",
- "@babel/plugin-transform-modules-amd": "^7.18.6",
- "@babel/plugin-transform-modules-commonjs": "^7.18.6",
- "@babel/plugin-transform-modules-systemjs": "^7.18.6",
- "@babel/plugin-transform-modules-umd": "^7.18.6",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6",
- "@babel/plugin-transform-new-target": "^7.18.6",
- "@babel/plugin-transform-object-super": "^7.18.6",
- "@babel/plugin-transform-parameters": "^7.18.6",
- "@babel/plugin-transform-property-literals": "^7.18.6",
- "@babel/plugin-transform-regenerator": "^7.18.6",
- "@babel/plugin-transform-reserved-words": "^7.18.6",
- "@babel/plugin-transform-shorthand-properties": "^7.18.6",
- "@babel/plugin-transform-spread": "^7.18.6",
- "@babel/plugin-transform-sticky-regex": "^7.18.6",
- "@babel/plugin-transform-template-literals": "^7.18.6",
- "@babel/plugin-transform-typeof-symbol": "^7.18.6",
- "@babel/plugin-transform-unicode-escapes": "^7.18.6",
- "@babel/plugin-transform-unicode-regex": "^7.18.6",
- "@babel/preset-modules": "^0.1.5",
- "@babel/types": "^7.18.6",
- "babel-plugin-polyfill-corejs2": "^0.3.1",
- "babel-plugin-polyfill-corejs3": "^0.5.2",
- "babel-plugin-polyfill-regenerator": "^0.3.1",
- "core-js-compat": "^3.22.1",
- "semver": "^6.3.0"
- }
- },
- "@babel/preset-flow": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz",
- "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-transform-flow-strip-types": "^7.18.6"
- }
- },
- "@babel/preset-modules": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
- "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
- "@babel/plugin-transform-dotall-regex": "^7.4.4",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- }
- },
- "@babel/preset-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
- "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-transform-typescript": "^7.18.6"
- }
- },
- "@babel/register": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.6.tgz",
- "integrity": "sha512-tkYtONzaO8rQubZzpBnvZPFcHgh8D9F55IjOsYton4X2IBoyRn2ZSWQqySTZnUn2guZbxbQiAB27hJEbvXamhQ==",
- "dev": true,
- "requires": {
- "clone-deep": "^4.0.1",
- "find-cache-dir": "^2.0.0",
- "make-dir": "^2.1.0",
- "pirates": "^4.0.5",
- "source-map-support": "^0.5.16"
- }
- },
- "@babel/runtime": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz",
- "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@babel/template": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
- "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.18.6",
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/traverse": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz",
- "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.6",
- "@babel/helper-function-name": "^7.18.6",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.18.6",
- "@babel/types": "^7.18.6",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.6.tgz",
- "integrity": "sha512-NdBNzPDwed30fZdDQtVR7ZgaO4UKjuaQFH9VArS+HMnurlOY0JWN+4ROlu/iapMFwjRQU4pOG4StZfDmulEwGA==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz",
- "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==",
- "dev": true
- },
- "@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
- "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
- "dev": true
- },
- "ast-types": {
- "version": "0.14.2",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz",
- "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==",
- "dev": true,
- "requires": {
- "tslib": "^2.0.1"
- }
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "babel-core": {
- "version": "7.0.0-bridge.0",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
- "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
- "dev": true,
- "requires": {}
- },
- "babel-plugin-dynamic-import-node": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
- "dev": true,
- "requires": {
- "object.assign": "^4.1.0"
- }
- },
- "babel-plugin-polyfill-corejs2": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
- "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/compat-data": "^7.13.11",
- "@babel/helper-define-polyfill-provider": "^0.3.1",
- "semver": "^6.1.1"
- }
- },
- "babel-plugin-polyfill-corejs3": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz",
- "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.1",
- "core-js-compat": "^3.21.0"
- }
- },
- "babel-plugin-polyfill-regenerator": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
- "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.1"
- }
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- }
- }
- },
- "browserslist": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz",
- "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001358",
- "electron-to-chromium": "^1.4.164",
- "node-releases": "^2.0.5",
- "update-browserslist-db": "^1.0.0"
- }
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "caniuse-lite": {
- "version": "1.0.30001359",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz",
- "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==",
- "dev": true
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- }
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
- "dev": true
- },
- "core-js-compat": {
- "version": "3.23.3",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz",
- "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==",
- "dev": true,
- "peer": true,
- "requires": {
- "browserslist": "^4.21.0",
- "semver": "7.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true,
- "peer": true
- }
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==",
- "dev": true
- },
- "define-properties": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
- "dev": true,
- "requires": {
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- }
- },
- "electron-to-chromium": {
- "version": "1.4.172",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.172.tgz",
- "integrity": "sha512-yDoFfTJnqBAB6hSiPvzmsBJSrjOXJtHSJoqJdI/zSIh7DYupYnIOHt/bbPw/WE31BJjNTybDdNAs21gCMnTh0Q==",
- "dev": true
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "peer": true
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- }
- }
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- }
- }
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "flow-parser": {
- "version": "0.181.1",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.181.1.tgz",
- "integrity": "sha512-+Mx87/GkmF5+FHk8IXc5WppD/oC4wB+05MuIv7qmIMgThND3RhOBGl7Npyc2L7NLVenme00ZlwEKVieiMz4bqA==",
- "dev": true
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
- "dev": true
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
- "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
- "dev": true
- },
- "glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "dev": true
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.1"
- }
- },
- "has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-core-module": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
- "dev": true,
- "peer": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "dev": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "jscodeshift": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz",
- "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.13.16",
- "@babel/parser": "^7.13.16",
- "@babel/plugin-proposal-class-properties": "^7.13.0",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8",
- "@babel/plugin-proposal-optional-chaining": "^7.13.12",
- "@babel/plugin-transform-modules-commonjs": "^7.13.8",
- "@babel/preset-flow": "^7.13.13",
- "@babel/preset-typescript": "^7.13.0",
- "@babel/register": "^7.13.16",
- "babel-core": "^7.0.0-bridge.0",
- "chalk": "^4.1.2",
- "flow-parser": "0.*",
- "graceful-fs": "^4.2.4",
- "micromatch": "^3.1.10",
- "neo-async": "^2.5.0",
- "node-dir": "^0.1.17",
- "recast": "^0.20.4",
- "temp": "^0.8.4",
- "write-file-atomic": "^2.3.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
- "dev": true,
- "peer": true
- },
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "node-dir": {
- "version": "0.1.17",
- "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
- "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==",
- "dev": true,
- "requires": {
- "minimatch": "^3.0.2"
- }
- },
- "node-releases": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
- "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "peer": true
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "pirates": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
- "dev": true
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
- "dev": true
- },
- "recast": {
- "version": "0.20.5",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz",
- "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==",
- "dev": true,
- "requires": {
- "ast-types": "0.14.2",
- "esprima": "~4.0.0",
- "source-map": "~0.6.1",
- "tslib": "^2.0.1"
- }
- },
- "regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
- "dev": true,
- "peer": true
- },
- "regenerate-unicode-properties": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
- "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
- "dev": true,
- "peer": true,
- "requires": {
- "regenerate": "^1.4.2"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.9",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
- "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
- "dev": true,
- "peer": true
- },
- "regenerator-transform": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
- "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/runtime": "^7.8.4"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "regexpu-core": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
- "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
- "dev": true,
- "peer": true,
- "requires": {
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.0.1",
- "regjsgen": "^0.6.0",
- "regjsparser": "^0.8.2",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.0.0"
- }
- },
- "regjsgen": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
- "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
- "dev": true,
- "peer": true
- },
- "regjsparser": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
- "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
- "dev": true,
- "peer": true,
- "requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
- "dev": true,
- "peer": true
- }
- }
- },
- "repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
- "dev": true
- },
- "resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "dev": true,
- "peer": true,
- "requires": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
- "dev": true
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- }
- }
- },
- "shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- }
- },
- "signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "dev": true
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "peer": true
- },
- "temp": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz",
- "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==",
- "dev": true,
- "requires": {
- "rimraf": "~2.6.2"
- }
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
- "dev": true
- },
- "unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
- "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
- "dev": true,
- "peer": true
- },
- "unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "dev": true,
- "peer": true,
- "requires": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- }
- },
- "unicode-match-property-value-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
- "dev": true,
- "peer": true
- },
- "unicode-property-aliases-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
- "dev": true,
- "peer": true
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- }
- }
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
- "dev": true
- }
- }
- },
- "update-browserslist-db": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz",
- "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==",
- "dev": true,
- "requires": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
- "dev": true
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- }
- }
-}
diff --git a/tools/esmify/package.json b/tools/esmify/package.json
deleted file mode 100644
index 152aaae5da..0000000000
--- a/tools/esmify/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "devDependencies": {
- "jscodeshift": "^0.13.1"
- },
- "scripts": {
- "convert_module": "jscodeshift -t use-import-export-declarations.js --stdin --verbose=2",
- "rewrite_imports": "jscodeshift -t import-to-import_esmodule.js --stdin --verbose=2"
- }
-}
diff --git a/tools/esmify/static-import.js b/tools/esmify/static-import.js
deleted file mode 100644
index e99bfb3380..0000000000
--- a/tools/esmify/static-import.js
+++ /dev/null
@@ -1,147 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* eslint-env node */
-
-const _path = require("path");
-const { getESMFiles } = require(_path.resolve(__dirname, "./is-esmified.js"));
-const {
- esmifyExtension,
- isString,
- warnForPath,
- isMemberExpressionWithIdentifiers,
-} = require(_path.resolve(__dirname, "./utils.js"));
-
-function isTargetESM(resourceURI) {
- if ("ESMIFY_TARGET_PREFIX" in process.env) {
- const files = getESMFiles(resourceURI);
- const targetPrefix = process.env.ESMIFY_TARGET_PREFIX;
- for (const esm of files) {
- if (esm.startsWith(targetPrefix)) {
- return true;
- }
- }
-
- return false;
- }
-
- return true;
-}
-
-function isImportESModuleCall(node) {
- return isMemberExpressionWithIdentifiers(node.callee, [
- "ChromeUtils",
- "importESModule",
- ]);
-}
-
-// Replace `ChromeUtils.import`, `Cu.import`, and `ChromeUtils.importESModule`
-// with static import if it's at the top-level of system ESM file.
-function tryReplacingWithStaticImport(
- jscodeshift,
- inputFile,
- path,
- resourceURINode,
- alwaysReplace
-) {
- if (!alwaysReplace && !inputFile.endsWith(".sys.mjs")) {
- // Static import is available only in system ESM.
- return false;
- }
-
- // Check if it's at the top-level.
- if (path.parent.node.type !== "VariableDeclarator") {
- return false;
- }
-
- if (path.parent.parent.node.type !== "VariableDeclaration") {
- return false;
- }
-
- const decls = path.parent.parent.node;
- if (decls.declarations.length !== 1) {
- return false;
- }
-
- if (path.parent.parent.parent.node.type !== "Program") {
- return false;
- }
-
- if (path.node.arguments.length !== 1) {
- return false;
- }
-
- const resourceURI = resourceURINode.value;
-
- // Collect imported symbols.
- const specs = [];
- if (path.parent.node.id.type === "Identifier") {
- specs.push(jscodeshift.importNamespaceSpecifier(path.parent.node.id));
- } else if (path.parent.node.id.type === "ObjectPattern") {
- for (const prop of path.parent.node.id.properties) {
- if (prop.shorthand) {
- specs.push(jscodeshift.importSpecifier(prop.key));
- } else if (prop.value.type === "Identifier") {
- specs.push(jscodeshift.importSpecifier(prop.key, prop.value));
- } else {
- return false;
- }
- }
- } else {
- return false;
- }
-
- // If this is `ChromeUtils.import` or `Cu.import`, replace the extension.
- // no-op for `ChromeUtils.importESModule`.
- resourceURINode.value = esmifyExtension(resourceURI);
-
- const e = jscodeshift.importDeclaration(specs, resourceURINode);
- e.comments = path.parent.parent.node.comments;
- path.parent.parent.node.comments = [];
- path.parent.parent.replace(e);
-
- return true;
-}
-
-function replaceImportESModuleCall(
- inputFile,
- jscodeshift,
- path,
- alwaysReplace
-) {
- if (path.node.arguments.length !== 1) {
- warnForPath(
- inputFile,
- path,
- `importESModule call should have only one argument`
- );
- return;
- }
-
- const resourceURINode = path.node.arguments[0];
- if (!isString(resourceURINode)) {
- warnForPath(inputFile, path, `resource URI should be a string`);
- return;
- }
-
- if (!alwaysReplace) {
- const resourceURI = resourceURINode.value;
- if (!isTargetESM(resourceURI)) {
- return;
- }
- }
-
- // If this cannot be replaced with static import, do nothing.
- tryReplacingWithStaticImport(
- jscodeshift,
- inputFile,
- path,
- resourceURINode,
- alwaysReplace
- );
-}
-
-exports.isImportESModuleCall = isImportESModuleCall;
-exports.tryReplacingWithStaticImport = tryReplacingWithStaticImport;
-exports.replaceImportESModuleCall = replaceImportESModuleCall;
diff --git a/tools/esmify/use-import-export-declarations.js b/tools/esmify/use-import-export-declarations.js
deleted file mode 100644
index 60e017645b..0000000000
--- a/tools/esmify/use-import-export-declarations.js
+++ /dev/null
@@ -1,208 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// jscodeshift rule to replace EXPORTED_SYMBOLS with export declarations,
-// and also convert existing ChromeUtils.importESModule to static import.
-
-/* eslint-env node */
-
-const _path = require("path");
-const {
- warnForPath,
- getPrevStatement,
- getNextStatement,
-} = require(_path.resolve(__dirname, "./utils.js"));
-const {
- isImportESModuleCall,
- replaceImportESModuleCall,
-} = require(_path.resolve(__dirname, "./static-import.js"));
-
-module.exports = function (fileInfo, api) {
- const { jscodeshift } = api;
- const root = jscodeshift(fileInfo.source);
- doTranslate(fileInfo.path, jscodeshift, root);
- return root.toSource({ lineTerminator: "\n" });
-};
-
-module.exports.doTranslate = doTranslate;
-
-// Move the comment for `path.node` to adjacent statement, keeping the position
-// as much as possible.
-function moveComments(inputFile, path) {
- const next = getNextStatement(path);
- if (next) {
- if (next.comments) {
- next.comments = [...path.node.comments, ...next.comments];
- } else {
- next.comments = path.node.comments;
- }
- path.node.comments = [];
-
- return;
- }
-
- const prev = getPrevStatement(path);
- if (prev) {
- path.node.comments.forEach(c => {
- c.leading = false;
- c.trailing = true;
- });
-
- if (prev.comments) {
- prev.comments = [...prev.comments, ...path.node.comments];
- } else {
- prev.comments = path.node.comments;
- }
- path.node.comments = [];
-
- return;
- }
-
- warnForPath(
- inputFile,
- path,
- `EXPORTED_SYMBOLS has comments and it cannot be preserved`
- );
-}
-
-function collectAndRemoveExportedSymbols(inputFile, root) {
- const nodes = root.findVariableDeclarators("EXPORTED_SYMBOLS");
- if (!nodes.length) {
- throw Error(`EXPORTED_SYMBOLS not found`);
- }
-
- let path = nodes.get(0);
- const obj = nodes.get(0).node.init;
- if (!obj) {
- throw Error(`EXPORTED_SYMBOLS is not statically known`);
- }
-
- if (path.parent.node.declarations.length !== 1) {
- throw Error(`EXPORTED_SYMBOLS shouldn't be declared with other variables`);
- }
-
- if (path.parent.node.comments && path.parent.node.comments.length) {
- moveComments(inputFile, path.parent);
- }
-
- path.parent.prune();
-
- const EXPORTED_SYMBOLS = new Set();
- if (obj.type !== "ArrayExpression") {
- throw Error(`EXPORTED_SYMBOLS is not statically known`);
- }
-
- for (const elem of obj.elements) {
- if (elem.type !== "Literal") {
- throw Error(`EXPORTED_SYMBOLS is not statically known`);
- }
- var name = elem.value;
- if (typeof name !== "string") {
- throw Error(`EXPORTED_SYMBOLS item must be a string`);
- }
- EXPORTED_SYMBOLS.add(name);
- }
-
- return EXPORTED_SYMBOLS;
-}
-
-function isTopLevel(path) {
- return path.parent.node.type === "Program";
-}
-
-function convertToExport(jscodeshift, path) {
- const e = jscodeshift.exportNamedDeclaration(path.node);
- e.comments = [];
- e.comments = path.node.comments;
- path.node.comments = [];
-
- path.replace(e);
-}
-
-function doTranslate(inputFile, jscodeshift, root) {
- const EXPORTED_SYMBOLS = collectAndRemoveExportedSymbols(inputFile, root);
-
- root.find(jscodeshift.FunctionDeclaration).forEach(path => {
- if (!isTopLevel(path)) {
- return;
- }
- const name = path.node.id.name;
- if (!EXPORTED_SYMBOLS.has(name)) {
- return;
- }
- EXPORTED_SYMBOLS.delete(name);
- convertToExport(jscodeshift, path, name);
- });
-
- root.find(jscodeshift.ClassDeclaration).forEach(path => {
- if (!isTopLevel(path)) {
- return;
- }
- const name = path.node.id.name;
- if (!EXPORTED_SYMBOLS.has(name)) {
- return;
- }
- EXPORTED_SYMBOLS.delete(name);
- convertToExport(jscodeshift, path, name);
- });
-
- root.find(jscodeshift.VariableDeclaration).forEach(path => {
- if (!isTopLevel(path)) {
- return;
- }
-
- let exists = false;
- let name;
- for (const decl of path.node.declarations) {
- if (decl.id.type === "Identifier") {
- name = decl.id.name;
- if (EXPORTED_SYMBOLS.has(name)) {
- exists = true;
- break;
- }
- }
-
- if (decl.id.type === "ObjectPattern") {
- if (decl.id.properties.length === 1) {
- const prop = decl.id.properties[0];
- if (prop.shorthand) {
- if (prop.key.type === "Identifier") {
- name = prop.key.name;
- if (EXPORTED_SYMBOLS.has(name)) {
- exists = true;
- break;
- }
- }
- }
- }
- }
- }
- if (!exists) {
- return;
- }
-
- if (path.node.declarations.length !== 1) {
- throw Error(
- `exported variable shouldn't be declared with other variables`
- );
- }
-
- EXPORTED_SYMBOLS.delete(name);
- convertToExport(jscodeshift, path, name);
- });
-
- if (EXPORTED_SYMBOLS.size !== 0) {
- throw Error(
- `exported symbols ${[...EXPORTED_SYMBOLS].join(", ")} not found`
- );
- }
-
- root.find(jscodeshift.CallExpression).forEach(path => {
- if (isImportESModuleCall(path.node)) {
- // This file is not yet renamed. Skip the extension check.
- // Also skip the isTargetESM.
- replaceImportESModuleCall(inputFile, jscodeshift, path, true);
- }
- });
-}
diff --git a/tools/esmify/utils.js b/tools/esmify/utils.js
deleted file mode 100644
index 386d4d6673..0000000000
--- a/tools/esmify/utils.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// Shared utility functions.
-
-/* eslint-env node */
-
-function warnForPath(inputFile, path, message) {
- const loc = path.node.loc;
- console.warn(
- `WARNING: ${inputFile}:${loc.start.line}:${loc.start.column} : ${message}`
- );
-}
-
-// Get the previous statement of `path.node` in `Program`.
-function getPrevStatement(path) {
- const parent = path.parent;
- if (parent.node.type !== "Program") {
- return null;
- }
-
- const index = parent.node.body.findIndex(n => n == path.node);
- if (index === -1) {
- return null;
- }
-
- if (index === 0) {
- return null;
- }
-
- return parent.node.body[index - 1];
-}
-
-// Get the next statement of `path.node` in `Program`.
-function getNextStatement(path) {
- const parent = path.parent;
- if (parent.node.type !== "Program") {
- return null;
- }
-
- const index = parent.node.body.findIndex(n => n == path.node);
- if (index === -1) {
- return null;
- }
-
- if (index + 1 == parent.node.body.length) {
- return null;
- }
-
- return parent.node.body[index + 1];
-}
-
-function isIdentifier(node, name) {
- if (node.type !== "Identifier") {
- return false;
- }
- if (node.name !== name) {
- return false;
- }
- return true;
-}
-
-function isString(node) {
- return node.type === "Literal" && typeof node.value === "string";
-}
-
-const jsmExtPattern = /\.(jsm|js|jsm\.js)$/;
-
-function esmifyExtension(path) {
- return path.replace(jsmExtPattern, ".sys.mjs");
-}
-
-// Given possible member expression, return the list of Identifier nodes in
-// the source order.
-//
-// Returns an empty array if:
-// * not a simple MemberExpression tree with Identifiers
-// * there's computed property
-function memberExpressionsToIdentifiers(memberExpr) {
- let ids = [];
-
- function f(node) {
- if (node.type !== "MemberExpression" || node.computed) {
- return false;
- }
-
- if (node.object.type === "Identifier") {
- ids.push(node.object);
- ids.push(node.property);
- return true;
- }
-
- if (!f(node.object)) {
- return false;
- }
- ids.push(node.property);
- return true;
- }
-
- if (!f(memberExpr)) {
- return [];
- }
-
- return ids;
-}
-
-// Returns true if the node is a simple MemberExpression tree with Identifiers
-// matches expectedIDs.
-function isMemberExpressionWithIdentifiers(node, expectedIDs) {
- const actualIDs = memberExpressionsToIdentifiers(node);
- if (actualIDs.length !== expectedIDs.length) {
- return false;
- }
-
- for (let i = 0; i < expectedIDs.length; i++) {
- if (actualIDs[i].name !== expectedIDs[i]) {
- return false;
- }
- }
-
- return true;
-}
-
-// Rewrite the Identifiers of MemberExpression tree to toIDs.
-// `node` must be a simple MemberExpression tree with Identifiers, and
-// the length of Identifiers should match.
-function rewriteMemberExpressionWithIdentifiers(node, toIDs) {
- const actualIDs = memberExpressionsToIdentifiers(node);
- for (let i = 0; i < toIDs.length; i++) {
- actualIDs[i].name = toIDs[i];
- }
-}
-
-// Create a simple MemberExpression tree with given Identifiers.
-function createMemberExpressionWithIdentifiers(jscodeshift, ids) {
- if (ids.length < 2) {
- throw new Error("Unexpected length of ids for member expression");
- }
-
- if (ids.length > 2) {
- return jscodeshift.memberExpression(
- createMemberExpressionWithIdentifiers(jscodeshift, ids.slice(0, -1)),
- jscodeshift.identifier(ids[ids.length - 1])
- );
- }
-
- return jscodeshift.memberExpression(
- jscodeshift.identifier(ids[0]),
- jscodeshift.identifier(ids[1])
- );
-}
-
-exports.warnForPath = warnForPath;
-exports.getPrevStatement = getPrevStatement;
-exports.getNextStatement = getNextStatement;
-exports.isIdentifier = isIdentifier;
-exports.isString = isString;
-exports.jsmExtPattern = jsmExtPattern;
-exports.esmifyExtension = esmifyExtension;
-exports.isMemberExpressionWithIdentifiers = isMemberExpressionWithIdentifiers;
-exports.rewriteMemberExpressionWithIdentifiers =
- rewriteMemberExpressionWithIdentifiers;
-exports.createMemberExpressionWithIdentifiers =
- createMemberExpressionWithIdentifiers;
diff --git a/tools/fuzzing/interface/FuzzingInterface.cpp b/tools/fuzzing/interface/FuzzingInterface.cpp
index f06ca68656..ba932c4b2a 100644
--- a/tools/fuzzing/interface/FuzzingInterface.cpp
+++ b/tools/fuzzing/interface/FuzzingInterface.cpp
@@ -28,3 +28,42 @@ LazyLogModule gFuzzingLog("nsFuzzing");
#endif
} // namespace mozilla
+
+#ifdef AFLFUZZ
+__AFL_FUZZ_INIT();
+
+int afl_interface_raw(FuzzingTestFuncRaw testFunc) {
+ __AFL_INIT();
+ char* testFilePtr = getenv("MOZ_FUZZ_TESTFILE");
+ uint8_t* buf = NULL;
+
+ if (testFilePtr) {
+ std::string testFile(testFilePtr);
+ while (__AFL_LOOP(1000)) {
+ std::ifstream is;
+ is.open(testFile, std::ios::binary);
+ is.seekg(0, std::ios::end);
+ size_t len = is.tellg();
+ is.seekg(0, std::ios::beg);
+ MOZ_RELEASE_ASSERT(len >= 0);
+ if (!len) {
+ is.close();
+ continue;
+ }
+ buf = reinterpret_cast<uint8_t*>(realloc(buf, len));
+ MOZ_RELEASE_ASSERT(buf);
+ is.read(reinterpret_cast<char*>(buf), len);
+ is.close();
+ testFunc(buf, len);
+ }
+ } else {
+ buf = __AFL_FUZZ_TESTCASE_BUF;
+ while (__AFL_LOOP(1000)) {
+ size_t len = __AFL_FUZZ_TESTCASE_LEN;
+ testFunc(buf, len);
+ }
+ }
+
+ return 0;
+}
+#endif // AFLFUZZ
diff --git a/tools/fuzzing/interface/FuzzingInterface.h b/tools/fuzzing/interface/FuzzingInterface.h
index 792f0809ec..31a4b50867 100644
--- a/tools/fuzzing/interface/FuzzingInterface.h
+++ b/tools/fuzzing/interface/FuzzingInterface.h
@@ -37,55 +37,17 @@ extern LazyLogModule gFuzzingLog;
MOZ_LOG(mozilla::gFuzzingLog, mozilla::LogLevel::Verbose, args)
#endif // JS_STANDALONE
+} // namespace mozilla
+
typedef int (*FuzzingTestFuncRaw)(const uint8_t*, size_t);
#ifdef AFLFUZZ
-static int afl_interface_raw(const char* testFile,
- FuzzingTestFuncRaw testFunc) {
- char* buf = NULL;
-
- while (__AFL_LOOP(1000)) {
- std::ifstream is;
- is.open(testFile, std::ios::binary);
- is.seekg(0, std::ios::end);
- int len = is.tellg();
- is.seekg(0, std::ios::beg);
- MOZ_RELEASE_ASSERT(len >= 0);
- if (!len) {
- is.close();
- continue;
- }
- buf = (char*)realloc(buf, len);
- MOZ_RELEASE_ASSERT(buf);
- is.read(buf, len);
- is.close();
- testFunc((uint8_t*)buf, (size_t)len);
- }
-
- free(buf);
-
- return 0;
-}
-
-# define MOZ_AFL_INTERFACE_COMMON() \
- char* testFilePtr = getenv("MOZ_FUZZ_TESTFILE"); \
- if (!testFilePtr) { \
- fprintf(stderr, \
- "Must specify testfile in MOZ_FUZZ_TESTFILE environment " \
- "variable.\n"); \
- return 1; \
- } \
- /* Make a copy of testFilePtr so the testing function can safely call \
- * getenv \
- */ \
- std::string testFile(testFilePtr);
+int afl_interface_raw(FuzzingTestFuncRaw testFunc);
# define MOZ_AFL_INTERFACE_RAW(initFunc, testFunc, moduleName) \
static int afl_fuzz_##moduleName(const uint8_t* data, size_t size) { \
- MOZ_RELEASE_ASSERT(data == NULL && size == 0); \
- MOZ_AFL_INTERFACE_COMMON(); \
- return ::mozilla::afl_interface_raw(testFile.c_str(), testFunc); \
+ return afl_interface_raw(testFunc); \
} \
static void __attribute__((constructor)) AFLRegister##moduleName() { \
::mozilla::FuzzerRegistry::getInstance().registerModule( \
@@ -110,6 +72,4 @@ static int afl_interface_raw(const char* testFile,
MOZ_LIBFUZZER_INTERFACE_RAW(initFunc, testFunc, moduleName); \
MOZ_AFL_INTERFACE_RAW(initFunc, testFunc, moduleName);
-} // namespace mozilla
-
#endif // FuzzingInterface_h__
diff --git a/tools/fuzzing/interface/FuzzingInterfaceStream.cpp b/tools/fuzzing/interface/FuzzingInterfaceStream.cpp
deleted file mode 100644
index f2c5c891e9..0000000000
--- a/tools/fuzzing/interface/FuzzingInterfaceStream.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
- * Interface implementation for the unified fuzzing interface
- */
-
-#include "nsIFile.h"
-#include "nsIPrefService.h"
-#include "nsIProperties.h"
-
-#include "FuzzingInterfaceStream.h"
-
-#include "mozilla/Assertions.h"
-
-#ifndef JS_STANDALONE
-# include "nsNetUtil.h"
-#endif
-
-namespace mozilla {
-
-#ifdef AFLFUZZ
-
-void afl_interface_stream(const char* testFile,
- FuzzingTestFuncStream testFunc) {
- nsresult rv;
- nsCOMPtr<nsIProperties> dirService =
- do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID);
- MOZ_RELEASE_ASSERT(dirService != nullptr);
- nsCOMPtr<nsIFile> file;
- rv = dirService->Get(NS_OS_CURRENT_WORKING_DIR, NS_GET_IID(nsIFile),
- getter_AddRefs(file));
- MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
- file->AppendNative(nsDependentCString(testFile));
- while (__AFL_LOOP(1000)) {
- nsCOMPtr<nsIInputStream> inputStream;
- rv = NS_NewLocalFileInputStream(getter_AddRefs(inputStream), file);
- MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
- if (!NS_InputStreamIsBuffered(inputStream)) {
- nsCOMPtr<nsIInputStream> bufStream;
- rv = NS_NewBufferedInputStream(getter_AddRefs(bufStream),
- inputStream.forget(), 1024);
- MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
- inputStream = bufStream;
- }
- testFunc(inputStream.forget());
- }
-}
-
-#endif
-
-} // namespace mozilla
diff --git a/tools/fuzzing/interface/FuzzingInterfaceStream.h b/tools/fuzzing/interface/FuzzingInterfaceStream.h
index 1542020794..44807d9ebd 100644
--- a/tools/fuzzing/interface/FuzzingInterfaceStream.h
+++ b/tools/fuzzing/interface/FuzzingInterfaceStream.h
@@ -28,32 +28,25 @@
#include "FuzzingInterface.h"
-namespace mozilla {
-
typedef int (*FuzzingTestFuncStream)(nsCOMPtr<nsIInputStream>);
#ifdef AFLFUZZ
-void afl_interface_stream(const char* testFile, FuzzingTestFuncStream testFunc);
-
-# define MOZ_AFL_INTERFACE_COMMON(initFunc) \
- if (initFunc) initFunc(NULL, NULL); \
- char* testFilePtr = getenv("MOZ_FUZZ_TESTFILE"); \
- if (!testFilePtr) { \
- fprintf(stderr, \
- "Must specify testfile in MOZ_FUZZ_TESTFILE environment " \
- "variable.\n"); \
- return; \
- } \
- /* Make a copy of testFilePtr so the testing function can safely call \
- * getenv \
- */ \
- std::string testFile(testFilePtr);
-
-# define MOZ_AFL_INTERFACE_STREAM(initFunc, testFunc, moduleName) \
- TEST(AFL, moduleName) \
- { \
- MOZ_AFL_INTERFACE_COMMON(initFunc); \
- ::mozilla::afl_interface_stream(testFile.c_str(), testFunc); \
+# define MOZ_AFL_INTERFACE_STREAM(initFunc, testFunc, moduleName) \
+ static int afl_fuzz_inner_##moduleName(const uint8_t* data, size_t size) { \
+ if (size > INT32_MAX) return 0; \
+ nsCOMPtr<nsIInputStream> stream; \
+ nsresult rv = NS_NewByteInputStream(getter_AddRefs(stream), \
+ Span((const char*)data, size), \
+ NS_ASSIGNMENT_DEPEND); \
+ MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv)); \
+ return testFunc(stream.forget()); \
+ } \
+ static int afl_fuzz_##moduleName(const uint8_t* data, size_t size) { \
+ return afl_interface_raw(afl_fuzz_inner_##moduleName); \
+ } \
+ static void __attribute__((constructor)) AFLRegister##moduleName() { \
+ ::mozilla::FuzzerRegistry::getInstance().registerModule( \
+ #moduleName, initFunc, afl_fuzz_##moduleName); \
}
#else
# define MOZ_AFL_INTERFACE_STREAM(initFunc, testFunc, moduleName) /* Nothing \
@@ -85,6 +78,4 @@ void afl_interface_stream(const char* testFile, FuzzingTestFuncStream testFunc);
MOZ_LIBFUZZER_INTERFACE_STREAM(initFunc, testFunc, moduleName); \
MOZ_AFL_INTERFACE_STREAM(initFunc, testFunc, moduleName);
-} // namespace mozilla
-
#endif // FuzzingInterfaceStream_h__
diff --git a/tools/fuzzing/interface/harness/FuzzerTestHarness.h b/tools/fuzzing/interface/harness/FuzzerTestHarness.h
index d7bb1064cf..6104be5438 100644
--- a/tools/fuzzing/interface/harness/FuzzerTestHarness.h
+++ b/tools/fuzzing/interface/harness/FuzzerTestHarness.h
@@ -14,6 +14,7 @@
#include "mozilla/ArrayUtils.h"
#include "mozilla/Attributes.h"
+#include "mozilla/IntegerPrintfMacros.h"
#include "prenv.h"
#include "nsComponentManagerUtils.h"
diff --git a/tools/fuzzing/interface/moz.build b/tools/fuzzing/interface/moz.build
index 8a51007174..fbfb59d924 100644
--- a/tools/fuzzing/interface/moz.build
+++ b/tools/fuzzing/interface/moz.build
@@ -21,10 +21,6 @@ else:
"FuzzingInterfaceStream.h",
]
- SOURCES += [
- "FuzzingInterfaceStream.cpp",
- ]
-
DIRS += [
"harness",
]
diff --git a/tools/fuzzing/ipc/IPCFuzzController.cpp b/tools/fuzzing/ipc/IPCFuzzController.cpp
index 7eee9102c0..ba52ec4095 100644
--- a/tools/fuzzing/ipc/IPCFuzzController.cpp
+++ b/tools/fuzzing/ipc/IPCFuzzController.cpp
@@ -52,6 +52,8 @@ const uint32_t ipcDefaultTriggerMsg = dom::PContent::Msg_SignalFuzzingReady__ID;
IPCFuzzController::IPCFuzzController()
: useLastPortName(false),
+ useLastPortNameAlways(false),
+ protoFilterTargetExcludeToplevel(false),
useLastActor(0),
mMutex("IPCFuzzController"),
mIPCTriggerMsg(ipcDefaultTriggerMsg) {
@@ -156,6 +158,18 @@ bool IPCFuzzController::GetRandomIPCMessageType(ProtocolId pId,
return true;
}
+static bool IsManagedByTargetActor(IProtocol* protocol,
+ std::string& protoIdFilter) {
+ while (protocol) {
+ if (!strcmp(protocol->GetProtocolName(), protoIdFilter.c_str())) {
+ return true;
+ }
+
+ protocol = protocol->Manager();
+ }
+ return false;
+}
+
void IPCFuzzController::OnActorConnected(IProtocol* protocol) {
if (!XRE_IsParentProcess()) {
return;
@@ -171,7 +185,8 @@ void IPCFuzzController::OnActorConnected(IProtocol* protocol) {
"DEBUG: IPCFuzzController::OnActorConnected() Mutex locked\n");
static bool protoIdFilterInitialized = false;
- static bool allowNewActors = false;
+ static bool allowSubActors =
+ !!getenv("MOZ_FUZZ_PROTOID_FILTER_ALLOW_SUBACTORS");
static std::string protoIdFilter;
if (!protoIdFilterInitialized) {
const char* protoIdFilterStr = getenv("MOZ_FUZZ_PROTOID_FILTER");
@@ -181,42 +196,67 @@ void IPCFuzzController::OnActorConnected(IProtocol* protocol) {
protoIdFilterInitialized = true;
}
-#ifdef FUZZ_DEBUG
- MOZ_FUZZING_NYX_PRINTF("INFO: [OnActorConnected] ActorID %d Protocol: %s\n",
- protocol->Id(), protocol->GetProtocolName());
-#endif
-
MessageChannel* channel = protocol->ToplevelProtocol()->GetIPCChannel();
Maybe<PortName> portName = channel->GetPortName();
+
+ if (!portName) {
+ MOZ_FUZZING_NYX_PRINTF("INFO: [OnActorConnected] ActorID %d Protocol: %s\n",
+ protocol->Id(), protocol->GetProtocolName());
+ }
+
if (portName) {
- if (!protoIdFilter.empty() &&
- (!Nyx::instance().started() || !allowNewActors) &&
- strcmp(protocol->GetProtocolName(), protoIdFilter.c_str()) &&
- !actorIds[*portName].empty()) {
- MOZ_FUZZING_NYX_PRINTF(
- "INFO: [OnActorConnected] ActorID %d Protocol: %s ignored due to "
- "filter.\n",
- protocol->Id(), protocol->GetProtocolName());
- return;
- } else if (!protoIdFilter.empty() &&
- !strcmp(protocol->GetProtocolName(), protoIdFilter.c_str())) {
- MOZ_FUZZING_NYX_PRINTF(
- "INFO: [OnActorConnected] ActorID %d Protocol: %s matches target.\n",
- protocol->Id(), protocol->GetProtocolName());
- } else if (!protoIdFilter.empty() && actorIds[*portName].empty()) {
+ if (!protoIdFilter.empty()) {
+ if (!strcmp(protocol->GetProtocolName(), protoIdFilter.c_str())) {
+ MOZ_FUZZING_NYX_PRINTF(
+ "INFO: [OnActorConnected] ActorID %d Protocol: %s matches "
+ "target.\n",
+ protocol->Id(), protocol->GetProtocolName());
+
+ // If our matching protocol is not a toplevel actor, then we need to
+ // exclude the toplevel protocol later in `MakeTargetDecision` because
+ // the actor will always be added to the map.
+ protoFilterTargetExcludeToplevel = protocol->Manager() != nullptr;
+ } else if (actorIds[*portName].empty()) {
+ MOZ_FUZZING_NYX_PRINTF(
+ "INFO: [OnActorConnected] ActorID %d Protocol: %s is toplevel "
+ "actor.\n",
+ protocol->Id(), protocol->GetProtocolName());
+ } else if (allowSubActors &&
+ IsManagedByTargetActor(protocol, protoIdFilter)) {
+ MOZ_FUZZING_NYX_PRINTF(
+ "INFO: [OnActorConnected] ActorID %d Protocol: %s is managed by "
+ "target actor.\n",
+ protocol->Id(), protocol->GetProtocolName());
+ } else {
+ // Not a toplevel actor, not matching the filter and also either not a
+ // sub actor of our target or we are focusing only on the target. Ignore
+ // this actor.
+ if (!!getenv("MOZ_FUZZ_DEBUG")) {
+ MOZ_FUZZING_NYX_PRINTF(
+ "INFO: [OnActorConnected] ActorID %d Protocol: %s ignored due to "
+ "filter.\n",
+ protocol->Id(), protocol->GetProtocolName());
+ }
+ return;
+ }
+ }
+
+ if (!!getenv("MOZ_FUZZ_DEBUG")) {
MOZ_FUZZING_NYX_PRINTF(
- "INFO: [OnActorConnected] ActorID %d Protocol: %s is toplevel "
- "actor.\n",
- protocol->Id(), protocol->GetProtocolName());
+ "INFO: [OnActorConnected] ActorID %d Protocol: %s Port: %lu %lu\n",
+ protocol->Id(), protocol->GetProtocolName(), portName->v1,
+ portName->v2);
}
actorIds[*portName].emplace_back(protocol->Id(), protocol->GetProtocolId());
- if (Nyx::instance().started() && protoIdFilter.empty()) {
- // Fix the port we will be using for at least the next 5 messages
- useLastPortName = true;
- lastActorPortName = *portName;
+ if (Nyx::instance().started()) {
+ if (!useLastPortNameAlways) {
+ // Fix the port we will be using for at least the next 5 messages
+ useLastPortName = true;
+ lastActorPortName = *portName;
+ }
// Use this actor for the next 5 messages
useLastActor = 5;
@@ -247,6 +287,16 @@ void IPCFuzzController::OnActorDestroyed(IProtocol* protocol) {
MOZ_FUZZING_NYX_DEBUG(
"DEBUG: IPCFuzzController::OnActorDestroyed() Mutex locked\n");
+ if (maybeLastActorId &&
+ (maybeLastActorId == protocol->Id() ||
+ (maybeLastActorId == MSG_ROUTING_CONTROL && !protocol->Id())) &&
+ lastActorPortName == *portName) {
+ MOZ_FUZZING_NYX_DEBUG("INFO: Actor pinning released.\n");
+ // We destroyed the actor we were focusing on, unpin.
+ maybeLastActorId = 0;
+ useLastActor = 0;
+ }
+
for (auto iter = actorIds[*portName].begin();
iter != actorIds[*portName].end();) {
if (iter->first == protocol->Id() &&
@@ -293,13 +343,14 @@ bool IPCFuzzController::ObserveIPCMessage(mozilla::ipc::NodeChannel* channel,
if (!channel->mBlockSendRecv) {
MOZ_FUZZING_NYX_PRINTF(
"INFO: [NodeChannel::OnMessageReceived] Blocking further "
- "communication on Port %lu %lu (seen fuzz msg)\n",
+ "communication on node %lu %lu (seen fuzz msg)\n",
channel->GetName().v1, channel->GetName().v2);
channel->mBlockSendRecv = true;
}
return true;
} else if (aMessage.type() == mIPCTriggerMsg && !Nyx::instance().started()) {
- MOZ_FUZZING_NYX_PRINT("DEBUG: Ready message detected.\n");
+ MOZ_FUZZING_NYX_PRINTF("DEBUG: Ready message detected on actor %d.\n",
+ aMessage.routing_id());
if (!haveTargetNodeName && !!getenv("MOZ_FUZZ_PROTOID_FILTER")) {
// With a protocol filter set, we want to pin to the actor that
@@ -322,8 +373,23 @@ bool IPCFuzzController::ObserveIPCMessage(mozilla::ipc::NodeChannel* channel,
}
lastActorPortName = event->port_name();
- useLastPortName = true;
- useLastActor = 1024;
+ useLastPortNameAlways = true;
+
+ if (!getenv("MOZ_FUZZ_PROTOID_FILTER_ALLOW_SUBACTORS")) {
+ // In this mode, we really want to focus on a single actor.
+ useLastActor = 1024;
+ maybeLastActorId = aMessage.routing_id();
+ MOZ_FUZZING_NYX_PRINTF("DEBUG: Pinned to actor %d forever.\n",
+ aMessage.routing_id());
+ } else {
+ // In this mode, we want to focus on a particular actor and all of its
+ // sub actors. This means we have to pin the port at least. Undesired
+ // other actors are filtered out already in OnActorConnected *except*
+ // for the toplevel actor belonging to this port. This exception is
+ // handled separately in MakeTargetDecision.
+ MOZ_FUZZING_NYX_PRINTF("DEBUG: Pinned to port %lu %lu forever.\n",
+ lastActorPortName.v1, lastActorPortName.v2);
+ }
}
// TODO: This is specific to PContent fuzzing. If we later want to fuzz
@@ -353,7 +419,7 @@ bool IPCFuzzController::ObserveIPCMessage(mozilla::ipc::NodeChannel* channel,
if (!channel->mBlockSendRecv) {
MOZ_FUZZING_NYX_PRINTF(
"INFO: [NodeChannel::OnMessageReceived] Blocking further "
- "communication on Port %lu %lu (fuzzing started)\n",
+ "communication on node %lu %lu (fuzzing started)\n",
channel->GetName().v1, channel->GetName().v2);
channel->mBlockSendRecv = true;
}
@@ -428,13 +494,14 @@ bool IPCFuzzController::ObserveIPCMessage(mozilla::ipc::NodeChannel* channel,
if (!channel->mBlockSendRecv) {
MOZ_FUZZING_NYX_PRINTF(
"INFO: [NodeChannel::OnMessageReceived] Blocking further "
- "communication on Port %lu %lu (fuzzing start pending)\n",
+ "communication on node %lu %lu (fuzzing start pending)\n",
channel->GetName().v1, channel->GetName().v2);
channel->mBlockSendRecv = true;
}
return false;
}
+ MOZ_FUZZING_NYX_ABORT("Unreachable");
return true;
}
}
@@ -452,6 +519,11 @@ bool IPCFuzzController::ObserveIPCMessage(mozilla::ipc::NodeChannel* channel,
portSeqNos.insert_or_assign(
name, std::pair<int32_t, uint64_t>(aMessage.seqno(),
userMsgEv->sequence_num()));
+#ifdef FUZZ_DEBUG
+ MOZ_FUZZING_NYX_PRINTF(
+ "DEBUG: Port %lu %lu updated sequence number to %lu\n", name.v1,
+ name.v2, userMsgEv->sequence_num());
+#endif
portNodeName.insert_or_assign(name, channel->GetName());
}
@@ -520,18 +592,6 @@ bool IPCFuzzController::MakeTargetDecision(
uint8_t portIndex, uint8_t portInstanceIndex, uint8_t actorIndex,
uint16_t typeOffset, PortName* name, int32_t* seqno, uint64_t* fseqno,
int32_t* actorId, uint32_t* type, bool* is_cons, bool update) {
- // Every possible toplevel actor type has a fixed number that
- // we assign to it in the constructor of this class. Here, we
- // use the lower 6 bits to select this toplevel actor type.
- // This approach has the advantage that the tests will always
- // select the same toplevel actor type deterministically,
- // independent of the order they appeared and independent
- // of the type of fuzzing we are doing.
- auto portInstances = portNames[portIndex & 0x3f];
- if (!portInstances.size()) {
- return false;
- }
-
if (useLastActor) {
useLastActor--;
*name = lastActorPortName;
@@ -541,17 +601,26 @@ bool IPCFuzzController::MakeTargetDecision(
// Once we stop pinning to the last actor, we need to decide if we
// want to keep the pinning on the port itself. We use one of the
// unused upper bits of portIndex for this purpose.
- if (!useLastActor && (portIndex & (1 << 7))) {
- if (mIPCTriggerMsg == ipcDefaultTriggerMsg) {
- MOZ_FUZZING_NYX_PRINT(
- "DEBUG: MakeTargetDecision: Released pinning on last port.\n");
- useLastPortName = false;
- }
+ if (!useLastActor && !useLastPortNameAlways && (portIndex & (1 << 7))) {
+ MOZ_FUZZING_NYX_PRINT(
+ "DEBUG: MakeTargetDecision: Released pinning on last port.\n");
+ useLastPortName = false;
}
- } else if (useLastPortName) {
+ } else if (useLastPortName || useLastPortNameAlways) {
*name = lastActorPortName;
MOZ_FUZZING_NYX_PRINT("DEBUG: MakeTargetDecision: Pinned to last port.\n");
} else {
+ // Every possible toplevel actor type has a fixed number that
+ // we assign to it in the constructor of this class. Here, we
+ // use the lower 6 bits to select this toplevel actor type.
+ // This approach has the advantage that the tests will always
+ // select the same toplevel actor type deterministically,
+ // independent of the order they appeared and independent
+ // of the type of fuzzing we are doing.
+ auto portInstances = portNames[portIndex & 0x3f];
+ if (!portInstances.size()) {
+ return false;
+ }
*name = portInstances[portInstanceIndex % portInstances.size()];
}
@@ -580,7 +649,26 @@ bool IPCFuzzController::MakeTargetDecision(
bool isPreserveHeader = *type;
if (useLastActor) {
- actorIndex = actors.size() - 1;
+ if (maybeLastActorId) {
+ bool found = false;
+ for (actorIndex = 0; actorIndex < actors.size(); ++actorIndex) {
+ // Toplevel actors have a discrepancy here: Routing ID is -1 but the
+ // actor id provided through protocol->Id() is 0.
+ if (actors[actorIndex].first == maybeLastActorId ||
+ (maybeLastActorId == MSG_ROUTING_CONTROL &&
+ !actors[actorIndex].first)) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ MOZ_FUZZING_NYX_ABORT(
+ "ERROR: Pinned to actor that's not in actors map!?\n");
+ }
+ } else {
+ actorIndex = actors.size() - 1;
+ }
} else if (isPreserveHeader) {
// In preserveHeaderMode, we need to find an actor that matches the
// requested message type instead of any random actor.
@@ -592,6 +680,11 @@ bool IPCFuzzController::MakeTargetDecision(
ProtocolId wantedProtocolId = static_cast<ProtocolId>(maybeProtocolId);
std::vector<uint32_t> allowedIndices;
for (uint32_t i = 0; i < actors.size(); ++i) {
+ if (protoFilterTargetExcludeToplevel && !i) {
+ // Filter out the toplevel protocol at index 0
+ continue;
+ }
+
if (actors[i].second == wantedProtocolId) {
allowedIndices.push_back(i);
}
@@ -602,6 +695,14 @@ bool IPCFuzzController::MakeTargetDecision(
}
actorIndex = allowedIndices[actorIndex % allowedIndices.size()];
+ } else if (protoFilterTargetExcludeToplevel) {
+ // Filter out the toplevel protocol
+ if (actors.size() < 2) {
+ // We likely destroyed all other actors
+ return false;
+ }
+ actorIndex %= actors.size() - 1;
+ actorIndex++;
} else {
actorIndex %= actors.size();
}
@@ -735,11 +836,14 @@ NS_IMETHODIMP IPCFuzzController::IPCFuzzLoop::Run() {
auto portNameResult =
IPCFuzzController::instance().portNodeName.find(iter->first);
if (portNameResult->second ==
- IPCFuzzController::instance().targetNodeName) {
- MOZ_FUZZING_NYX_PRINT(
+ IPCFuzzController::instance().targetNodeName &&
+ IPCFuzzController::instance().mIPCTriggerMsg ==
+ ipcDefaultTriggerMsg) {
+ MOZ_FUZZING_NYX_PRINTF(
"ERROR: We should not have port map entries without a "
"corresponding "
- "entry in our actors map\n");
+ "entry in our actors map (Port %lu %lu)\n",
+ iter->first.v1, iter->first.v2);
MOZ_REALLY_CRASH(__LINE__);
} else {
iter = IPCFuzzController::instance().portSeqNos.erase(iter);
@@ -952,6 +1056,9 @@ NS_IMETHODIMP IPCFuzzController::IPCFuzzLoop::Run() {
msg->header()->type = msgType;
}
+ // Make sure we're not sending with LAZY_SEND
+ msg->header()->flags.mFlags &= ~IPC::Message::HeaderFlags::LAZY_SEND_BIT;
+
// Create the footer
auto messageEvent = MakeUnique<UserMessageEvent>(0);
messageEvent->set_port_name(new_port_name);
@@ -985,6 +1092,14 @@ NS_IMETHODIMP IPCFuzzController::IPCFuzzLoop::Run() {
msg->header()->flags, msg->header()->txid, msg->header()->num_handles);
#endif
+ if (!!getenv("MOZ_FUZZ_DEBUG")) {
+ MOZ_FUZZING_NYX_PRINTF(
+ "INFO: Flags: IsSync: %d IsReply: %d IsReplyError: %d IsConstructor: "
+ "%d IsRelay: %d IsLazySend: %d\n",
+ msg->is_sync(), msg->is_reply(), msg->is_reply_error(),
+ msg->is_constructor(), msg->is_relay(), msg->is_lazy_send());
+ }
+
// The number of messages we expect to see stopped.
expected_messages++;
@@ -1117,6 +1232,9 @@ void IPCFuzzController::SynchronizeOnMessageExecution(
Nyx::instance().handle_event("MOZ_TIMEOUT", nullptr, 0, nullptr);
MOZ_FUZZING_NYX_PRINT(
"ERROR: ======== END OF ITERATION (TIMEOUT) ========\n");
+ if (!!getenv("MOZ_FUZZ_CRASH_ON_TIMEOUT")) {
+ MOZ_DIAGNOSTIC_ASSERT(false, "IPCFuzzController Timeout");
+ }
Nyx::instance().release(
IPCFuzzController::instance().getMessageStopCount());
}
@@ -1241,6 +1359,7 @@ UniquePtr<IPC::Message> IPCFuzzController::replaceIPCMessage(
IPCFuzzController::instance().useLastActor = 0;
IPCFuzzController::instance().useLastPortName = false;
+ IPCFuzzController::instance().useLastPortNameAlways = false;
MOZ_FUZZING_NYX_DEBUG("DEBUG: Requesting data...\n");
@@ -1276,7 +1395,7 @@ UniquePtr<IPC::Message> IPCFuzzController::replaceIPCMessage(
ipchdr->payload_size = ipcMsgLen - sizeof(IPC::Message::Header);
if (Nyx::instance().is_replay()) {
- MOZ_FUZZING_NYX_PRINT("INFO: Replaying IPC packet with payload:\n");
+ MOZ_FUZZING_NYX_PRINT("INFO: Replaying single IPC packet with payload:\n");
for (uint32_t i = 0; i < ipcMsgLen - sizeof(IPC::Message::Header); ++i) {
if (i % 16 == 0) {
MOZ_FUZZING_NYX_PRINT("\n ");
@@ -1291,6 +1410,11 @@ UniquePtr<IPC::Message> IPCFuzzController::replaceIPCMessage(
UniquePtr<IPC::Message> msg(new IPC::Message(ipcMsgData, ipcMsgLen));
+ if (!!getenv("MOZ_FUZZ_DEBUG")) {
+ MOZ_FUZZING_NYX_PRINTF("INFO: Name: %s Target: %d\n", msg->name(),
+ msg->routing_id());
+ }
+
// This marks the message as a fuzzing message. Without this, it will
// be ignored by MessageTask and also not even scheduled by NodeChannel
// in asynchronous mode. We use this to ignore any IPC activity that
diff --git a/tools/fuzzing/ipc/IPCFuzzController.h b/tools/fuzzing/ipc/IPCFuzzController.h
index 756a68f38f..5c27443381 100644
--- a/tools/fuzzing/ipc/IPCFuzzController.h
+++ b/tools/fuzzing/ipc/IPCFuzzController.h
@@ -138,13 +138,24 @@ class IPCFuzzController {
// If set, `lastActorPortName` is valid and fuzzing is pinned to this port.
Atomic<bool> useLastPortName;
- // Last port where a new actor appeared. Only valid with `useLastPortName`.
+ // If set, `lastActorPortName` is valid and fuzzing is forever pinned to this
+ // port.
+ Atomic<bool> useLastPortNameAlways;
+
+ // If set, the toplevel actor will be from fuzzing.
+ Atomic<bool> protoFilterTargetExcludeToplevel;
+
+ // Last port where a new actor appeared. Only valid with
+ // `useLastPortName`.
mojo::core::ports::PortName lastActorPortName;
// Counter to indicate how long fuzzing should stay pinned to the last
// actor that appeared on `lastActorPortName`.
Atomic<uint32_t> useLastActor;
+ // If this is non-zero, we want a specific actor ID instead of the last.
+ Atomic<int32_t> maybeLastActorId;
+
// This is the deterministic ordering of toplevel actors for fuzzing.
// In this matrix, each row (toplevel index) corresponds to one toplevel
// actor *type* while each entry in that row is an instance of that type,
diff --git a/tools/fuzzing/smoke/smoke.py b/tools/fuzzing/smoke/smoke.py
index bfc7cb56cd..1a031a18f9 100644
--- a/tools/fuzzing/smoke/smoke.py
+++ b/tools/fuzzing/smoke/smoke.py
@@ -6,7 +6,7 @@
This script can be used to perform simple calls using `jsshell`
or whatever other tools you may add.
-The call is done via `taskcluster/ci/fuzzing/kind.yml` and
+The call is done via `taskcluster/kinds/fuzzing/kind.yml` and
files contained in the `target.jsshell.zip` and `target.fuzztest.tests.tar.gz`
build artifacts are downloaded to run things.
diff --git a/tools/github-sync/converter.py b/tools/github-sync/converter.py
deleted file mode 100755
index 104229e299..0000000000
--- a/tools/github-sync/converter.py
+++ /dev/null
@@ -1,481 +0,0 @@
-#!/usr/bin/env python3
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-import os
-import re
-import subprocess
-import sys
-
-import hglib
-import pygit2
-
-DEBUG = False
-
-
-def eprint(*args, **kwargs):
- print(*args, file=sys.stderr, **kwargs)
-
-
-def debugprint(*args, **kwargs):
- if DEBUG:
- eprint(*args, **kwargs)
-
-
-class HgCommit:
- def __init__(self, parent1, parent2):
- self.parents = []
- if parent1 == NULL_PARENT_REV:
- raise Exception(
- "Encountered a hg changeset with no parents! We don't handle this...."
- )
- self.parents.append(parent1)
- if parent2 != NULL_PARENT_REV:
- self.parents.append(parent2)
- self.touches_sync_code = False
- self.children = []
-
- def add_child(self, rev):
- self.children.append(rev)
-
-
-class GitCommit:
- def __init__(self, hg_rev, commit_obj):
- self.hg_rev = hg_rev
- self.commit_obj = commit_obj
-
-
-def load_git_repository():
- commit_map = dict()
- # First, scan the tags for "mozilla-xxx" that keep track of manually synchronized changes
- sync_tags = filter(
- lambda ref: ref.startswith("refs/tags/mozilla-"),
- list(downstream_git_repo.references),
- )
- for desc in sync_tags:
- commit = downstream_git_repo.lookup_reference(desc).peel()
- # cut out the revision hash from the output
- hg_rev = desc[18:]
- commit_map[hg_rev] = GitCommit(hg_rev, commit)
- debugprint("Loaded pre-existing tag hg %s -> git %s" % (hg_rev, commit.oid))
-
- # Next, scan the commits for a specific message format
- re_commitmsg = re.compile(
- r"^\[(ghsync|wrupdater)\] From https://hg.mozilla.org/mozilla-central/rev/([0-9a-fA-F]+)$",
- re.MULTILINE,
- )
- for commit in downstream_git_repo.walk(downstream_git_repo.head.target):
- m = re_commitmsg.search(commit.message)
- if not m:
- continue
- hg_rev = m.group(2)
- commit_map[hg_rev] = GitCommit(hg_rev, commit)
- debugprint("Loaded pre-existing commit hg %s -> git %s" % (hg_rev, commit.oid))
- return commit_map
-
-
-def timeof(git_commit):
- return git_commit.commit_obj.commit_time + git_commit.commit_obj.commit_time_offset
-
-
-def find_newest_commit(commit_map):
- newest_hg_rev = None
- newest_commit_time = None
-
- for hg_rev, git_commit in commit_map.items():
- if newest_hg_rev is None or timeof(git_commit) > newest_commit_time:
- newest_hg_rev = hg_rev
- newest_commit_time = timeof(git_commit)
-
- return newest_hg_rev
-
-
-def get_single_rev(revset):
- output = subprocess.check_output(
- ["hg", "log", "-r", revset, "--template", "{node}"]
- )
- output = str(output, "ascii")
- return output
-
-
-def get_multiple_revs(revset, template):
- output = subprocess.check_output(
- ["hg", "log", "-r", revset, "--template", template + "\\n"]
- )
- for line in output.splitlines():
- yield str(line, "ascii")
-
-
-def get_base_hg_rev(commit_map):
- base_hg_rev = find_newest_commit(commit_map)
- eprint("Using %s as base hg revision" % base_hg_rev)
- return base_hg_rev
-
-
-def load_hg_commits(commits, query):
- for cset in get_multiple_revs(query, "{node} {p1node} {p2node}"):
- tokens = cset.split()
- commits[tokens[0]] = HgCommit(tokens[1], tokens[2])
- return commits
-
-
-def get_real_base_hg_rev(hg_data, commit_map):
- # Some of the HG commits we want to port to github may have landed on codelines
- # that branched off central prior to base_hg_rev. So when we create the git
- # equivalents, they will have parents that are not the HEAD of the git repo,
- # but instead will be descendants of older commits in the git repo. In order
- # to do this correctly, we need to find the hg-equivalents of all of those
- # possible git parents. So first we identify all the "tail" hg revisions in
- # our hg_data set (think "tail" as in opposite of "head" which is the tipmost
- # commit). The "tail" hg revisions are the ones for which we don't have their
- # ancestors in hg_data.
- tails = []
- for rev, cset in hg_data.items():
- for parent in cset.parents:
- if parent not in hg_data:
- tails.append(rev)
- eprint("Found hg tail revisions %s" % tails)
- # Then we find their common ancestor, which will be some ancestor of base_hg_rev
- # from which those codelines.
- if len(tails) == 0:
- common_ancestor = get_single_rev(".")
- else:
- common_ancestor = get_single_rev("ancestor(" + ",".join(tails) + ")")
- eprint("Found common ancestor of tail revisions: %s" % common_ancestor)
-
- # And then we find the newest git commit whose hg-equivalent is an ancestor of
- # that common ancestor, to make sure we are starting from a known hg/git
- # commit pair.
- for git_commit in sorted(commit_map.values(), key=timeof, reverse=True):
- new_base = get_single_rev(
- "ancestor(" + common_ancestor + "," + git_commit.hg_rev + ")"
- )
- if new_base == common_ancestor:
- eprint(
- "Pre-existing git commit %s from hg rev %s is descendant of common ancestor; %s"
- % (
- git_commit.commit_obj.id,
- git_commit.hg_rev,
- "walking back further...",
- )
- )
- continue
- if new_base != git_commit.hg_rev:
- eprint(
- "Pre-existing git commit %s from hg rev %s is on sibling branch"
- " of common ancestor; %s"
- % (
- git_commit.commit_obj.id,
- git_commit.hg_rev,
- "walking back further...",
- )
- )
- continue
- eprint(
- "Pre-existing git commit %s from hg rev %s is sufficiently old; stopping walk"
- % (git_commit.commit_obj.id, git_commit.hg_rev)
- )
- common_ancestor = new_base
- break
-
- return common_ancestor
-
-
-# Now we prune out all the uninteresting changesets from hg_commits. The
-# uninteresting ones are ones that don't touch the target code, are not merges,
-# and are not referenced by mozilla tags in the git repo.
-# We do this by rewriting the parents to the "interesting" ancestor.
-def prune_boring(rev):
- while rev in hg_commits:
- parent_pruned = False
- for i in range(len(hg_commits[rev].parents)):
- parent_rev = hg_commits[rev].parents[i]
- if parent_rev not in hg_commits:
- continue
- if hg_commits[parent_rev].touches_sync_code:
- continue
- if len(hg_commits[parent_rev].parents) > 1:
- continue
- if parent_rev in hg_to_git_commit_map:
- continue
-
- # If we get here, then `parent_rev` is a boring revision and we can
- # prune it. Connect `rev` to its grandparent, and prune the parent
- grandparent_rev = hg_commits[parent_rev].parents[0]
- hg_commits[rev].parents[i] = grandparent_rev
- # eprint("Pruned %s as boring parent of %s, using %s now" %
- # (parent_rev, rev, grandparent_rev))
- parent_pruned = True
-
- if parent_pruned:
- # If we pruned a parent, process `rev` again as we might want to
- # prune more parents
- continue
-
- # Collapse identical parents, because if the parents are identical
- # we don't need to keep multiple copies of them.
- hg_commits[rev].parents = list(dict.fromkeys(hg_commits[rev].parents))
-
- # If we get here, all of `rev`s parents are interesting, so we can't
- # prune them. Move up to the parent rev and start processing that, or
- # if we have multiple parents then recurse on those nodes.
- if len(hg_commits[rev].parents) == 1:
- rev = hg_commits[rev].parents[0]
- continue
-
- for parent_rev in hg_commits[rev].parents:
- prune_boring(parent_rev)
- return
-
-
-class FakeCommit:
- def __init__(self, oid):
- self.oid = oid
-
-
-def fake_commit(hg_rev, parent1, parent2):
- if parent1 is None:
- eprint("ERROR: Trying to build on None")
- exit(1)
- oid = "githash_%s" % hash(parent1)
- eprint("Fake-built %s" % oid)
- return FakeCommit(oid)
-
-
-def build_tree(builder, treedata):
- for name, value in treedata.items():
- if isinstance(value, dict):
- subbuilder = downstream_git_repo.TreeBuilder()
- build_tree(subbuilder, value)
- builder.insert(name, subbuilder.write(), pygit2.GIT_FILEMODE_TREE)
- else:
- (filemode, contents) = value
- blob_oid = downstream_git_repo.create_blob(contents)
- builder.insert(name, blob_oid, filemode)
-
-
-def author_to_signature(author):
- pieces = author.strip().split("<")
- if len(pieces) != 2 or pieces[1][-1] != ">":
- # We could probably handle this better
- return pygit2.Signature(author, "")
- name = pieces[0].strip()
- email = pieces[1][:-1].strip()
- return pygit2.Signature(name, email)
-
-
-def real_commit(hg_rev, parent1, parent2):
- filetree = dict()
- manifest = mozilla_hg_repo.manifest(rev=hg_rev)
- for nodeid, permission, executable, symlink, filename in manifest:
- if not filename.startswith(relative_path.encode("utf-8")):
- continue
- if symlink:
- filemode = pygit2.GIT_FILEMODE_LINK
- elif executable:
- filemode = pygit2.GIT_FILEMODE_BLOB_EXECUTABLE
- else:
- filemode = pygit2.GIT_FILEMODE_BLOB
- filecontent = mozilla_hg_repo.cat([filename], rev=hg_rev)
- subtree = filetree
- for component in filename.split(b"/")[2:-1]:
- subtree = subtree.setdefault(component.decode("latin-1"), dict())
- filename = filename.split(b"/")[-1]
- subtree[filename.decode("latin-1")] = (filemode, filecontent)
-
- builder = downstream_git_repo.TreeBuilder()
- build_tree(builder, filetree)
- tree_oid = builder.write()
-
- parent1_obj = downstream_git_repo.get(parent1)
- if parent1_obj.tree_id == tree_oid:
- eprint("Early-exit; tree matched that of parent git commit %s" % parent1)
- return parent1_obj
-
- if parent2 is not None:
- parent2_obj = downstream_git_repo.get(parent2)
- if parent2_obj.tree_id == tree_oid:
- eprint("Early-exit; tree matched that of parent git commit %s" % parent2)
- return parent2_obj
-
- hg_rev_obj = mozilla_hg_repo.log(revrange=hg_rev, limit=1)[0]
- commit_author = hg_rev_obj[4].decode("latin-1")
- commit_message = hg_rev_obj[5].decode("latin-1")
- commit_message += (
- "\n\n[ghsync] From https://hg.mozilla.org/mozilla-central/rev/%s" % hg_rev
- + "\n"
- )
-
- parents = [parent1]
- if parent2 is not None:
- parents.append(parent2)
- commit_oid = downstream_git_repo.create_commit(
- None,
- author_to_signature(commit_author),
- author_to_signature(commit_author),
- commit_message,
- tree_oid,
- parents,
- )
- eprint("Built git commit %s" % commit_oid)
- return downstream_git_repo.get(commit_oid)
-
-
-def try_commit(hg_rev, parent1, parent2=None):
- if False:
- return fake_commit(hg_rev, parent1, parent2)
- else:
- return real_commit(hg_rev, parent1, parent2)
-
-
-def build_git_commits(rev):
- debugprint("build_git_commit(%s)..." % rev)
- if rev in hg_to_git_commit_map:
- debugprint(" maps to %s" % hg_to_git_commit_map[rev].commit_obj.oid)
- return hg_to_git_commit_map[rev].commit_obj.oid
-
- if rev not in hg_commits:
- debugprint(" not in hg_commits")
- return None
-
- if len(hg_commits[rev].parents) == 1:
- git_parent = build_git_commits(hg_commits[rev].parents[0])
- if not hg_commits[rev].touches_sync_code:
- eprint(
- "WARNING: Found rev %s that is non-merge and not related to the target"
- % rev
- )
- return git_parent
- eprint("Building git equivalent for %s on top of %s" % (rev, git_parent))
- commit_obj = try_commit(rev, git_parent)
- hg_to_git_commit_map[rev] = GitCommit(rev, commit_obj)
- debugprint(" built %s as %s" % (rev, commit_obj.oid))
- return commit_obj.oid
-
- git_parent_1 = build_git_commits(hg_commits[rev].parents[0])
- git_parent_2 = build_git_commits(hg_commits[rev].parents[1])
- if git_parent_1 is None or git_parent_2 is None or git_parent_1 == git_parent_2:
- git_parent = git_parent_1 if git_parent_2 is None else git_parent_2
- if not hg_commits[rev].touches_sync_code:
- debugprint(
- " %s is merge with no parents or doesn't touch WR, returning %s"
- % (rev, git_parent)
- )
- return git_parent
-
- eprint(
- "WARNING: Found merge rev %s whose parents have identical target code"
- ", but modifies the target" % rev
- )
- eprint("Building git equivalent for %s on top of %s" % (rev, git_parent))
- commit_obj = try_commit(rev, git_parent)
- hg_to_git_commit_map[rev] = GitCommit(rev, commit_obj)
- debugprint(" built %s as %s" % (rev, commit_obj.oid))
- return commit_obj.oid
-
- # An actual merge
- eprint(
- "Building git equivalent for %s on top of %s, %s"
- % (rev, git_parent_1, git_parent_2)
- )
- commit_obj = try_commit(rev, git_parent_1, git_parent_2)
- hg_to_git_commit_map[rev] = GitCommit(rev, commit_obj)
- debugprint(" built %s as %s" % (rev, commit_obj.oid))
- return commit_obj.oid
-
-
-def pretty_print(rev, cset):
- desc = " %s" % rev
- desc += " parents: %s" % cset.parents
- if rev in hg_to_git_commit_map:
- desc += " git: %s" % hg_to_git_commit_map[rev].commit_obj.oid
- if rev == hg_tip:
- desc += " (tip)"
- return desc
-
-
-if len(sys.argv) < 3:
- eprint("Usage: %s <local-checkout-path> <repo-relative-path>" % sys.argv[0])
- eprint("Current dir must be the mozilla hg repo")
- exit(1)
-
-local_checkout_path = sys.argv[1]
-relative_path = sys.argv[2]
-mozilla_hg_path = os.getcwd()
-NULL_PARENT_REV = "0000000000000000000000000000000000000000"
-
-downstream_git_repo = pygit2.Repository(pygit2.discover_repository(local_checkout_path))
-mozilla_hg_repo = hglib.open(mozilla_hg_path)
-hg_to_git_commit_map = load_git_repository()
-base_hg_rev = get_base_hg_rev(hg_to_git_commit_map)
-if base_hg_rev is None:
- eprint("Found no sync commits or 'mozilla-xxx' tags")
- exit(1)
-
-hg_commits = load_hg_commits(dict(), "only(.," + base_hg_rev + ")")
-eprint("Initial set has %s changesets" % len(hg_commits))
-base_hg_rev = get_real_base_hg_rev(hg_commits, hg_to_git_commit_map)
-eprint("Using hg rev %s as common ancestor of all interesting changesets" % base_hg_rev)
-
-# Refresh hg_commits with our wider dataset
-hg_tip = get_single_rev(".")
-wider_range = "%s::%s" % (base_hg_rev, hg_tip)
-hg_commits = load_hg_commits(hg_commits, wider_range)
-eprint("Updated set has %s changesets" % len(hg_commits))
-
-if DEBUG:
- eprint("Graph of descendants of %s" % base_hg_rev)
- output = subprocess.check_output(
- [
- "hg",
- "log",
- "--graph",
- "-r",
- "descendants(" + base_hg_rev + ")",
- "--template",
- "{node} {desc|firstline}\\n",
- ]
- )
- for line in output.splitlines():
- eprint(line.decode("utf-8", "ignore"))
-
-# Also flag any changes that touch the project
-query = "(" + wider_range + ') & file("glob:' + relative_path + '/**")'
-for cset in get_multiple_revs(query, "{node}"):
- debugprint("Changeset %s modifies %s" % (cset, relative_path))
- hg_commits[cset].touches_sync_code = True
-eprint(
- "Identified %s changesets that touch the target code"
- % sum([1 if v.touches_sync_code else 0 for (k, v) in hg_commits.items()])
-)
-
-prune_boring(hg_tip)
-
-# hg_tip itself might be boring
-if not hg_commits[hg_tip].touches_sync_code and len(hg_commits[hg_tip].parents) == 1:
- new_tip = hg_commits[hg_tip].parents[0]
- eprint("Pruned tip %s as boring, using %s now" % (hg_tip, new_tip))
- hg_tip = new_tip
-
-eprint("--- Interesting changesets ---")
-for rev, cset in hg_commits.items():
- if cset.touches_sync_code or len(cset.parents) > 1 or rev in hg_to_git_commit_map:
- eprint(pretty_print(rev, cset))
-if DEBUG:
- eprint("--- Other changesets (not really interesting) ---")
- for rev, cset in hg_commits.items():
- if not (
- cset.touches_sync_code
- or len(cset.parents) > 1
- or rev in hg_to_git_commit_map
- ):
- eprint(pretty_print(rev, cset))
-
-git_tip = build_git_commits(hg_tip)
-if git_tip is None:
- eprint("No new changesets generated, exiting.")
-else:
- downstream_git_repo.create_reference("refs/heads/github-sync", git_tip, force=True)
- eprint("Updated github-sync branch to %s, done!" % git_tip)
diff --git a/tools/github-sync/read-json.py b/tools/github-sync/read-json.py
deleted file mode 100755
index 87264d7df4..0000000000
--- a/tools/github-sync/read-json.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python3
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-import json
-import sys
-
-j = json.load(sys.stdin)
-components = sys.argv[1].split("/")
-
-
-def next_match(json_fragment, components):
- if len(components) == 0:
- yield json_fragment
- else:
- component = components[0]
- if type(json_fragment) == list:
- if component == "*":
- for item in json_fragment:
- yield from next_match(item, components[1:])
- else:
- component = int(component)
- if component >= len(j):
- sys.exit(1)
- yield from next_match(json_fragment[component], components[1:])
- elif type(json_fragment) == dict:
- if component == "*":
- for key in sorted(json_fragment.keys()):
- yield from next_match(json_fragment[key], components[1:])
- elif component not in json_fragment:
- sys.exit(1)
- else:
- yield from next_match(json_fragment[component], components[1:])
-
-
-for match in list(next_match(j, components)):
- if type(match) == dict:
- print(" ".join(match.keys()))
- else:
- print(match)
diff --git a/tools/github-sync/readme.md b/tools/github-sync/readme.md
deleted file mode 100644
index d691071336..0000000000
--- a/tools/github-sync/readme.md
+++ /dev/null
@@ -1,106 +0,0 @@
-# Github synchronization scripts
-
-This tool aims to help synchronizing changes from mozilla-central to Github on pushes.
-This is useful for Gecko sub-projects that have Github mirrors, like `gfx/wr` linking to `https://github.com/servo/webrender`.
-Originally, the tools were developed in `https://github.com/staktrace/wrupdater`,
-then got moved under `gfx/wr/ci-scripts/wrupdater`,
-and finally migrated here while also abstracting away from WebRender specifically.
-
-The main entry point is the `sync-to-github.sh` script that is called with the following arguments:
- 1. name of the project, matching the repository under `https://github.com/moz-gfx` user (e.g. `webrender`)
- 2. relative folder in mozilla-central, which is the upstream for the changes (e.g. `gfx/wr`)
- 3. downstream repository specified as "organization/project-name" (e.g. `servo/webrender`)
- 4. name to call for auto-approving the pull request (e.g. `bors` or `@bors-servo`)
-
-It creates a staging directory at `~/.ghsync` if one doesn't already exist,
-and clones the the downstream repo into it.
-The script also requires the `GECKO_PATH` environment variable
-to point to a mercurial clone of `mozilla-central`, and access to the
-taskcluster secrets service to get a Github API token.
-
-The `sync-to-github.sh` script does some setup steps but the bulk of the actual work
-is done by the `converter.py` script. This script scans the mercurial
-repository for new changes to the relative folder in m-c,
-and adds commits to the git repository corresponding to those changes.
-There are some details in the implementation that make it more robust
-than simply exporting patches and attempting to reapply them;
-in particular it builds a commit tree structure that mirrors what is found in
-the `mozilla-central` repository with respect to branches and merges.
-So if conflicting changes land on autoland and inbound, and then get
-merged, the git repository commits will have the same structure with
-a fork/merge in the commit history. This was discovered to be
-necessary after a previous version ran into multiple cases where
-the simple patch approach didn't really work.
-
-One of the actions the `converter.py` takes is to find the last sync point
-between Github and mozilla-central. This is done based on the following markers:
- - commit message containing the string "[ghsync] From https://hg.mozilla.org/mozilla-central/rev/xxx"
- - commit message containing the string "[wrupdater] From https://hg.mozilla.org/mozilla-central/rev/xxx"
- - commit with tag "mozilla-xxx"
-(where xxx is always a mozilla-central hg revision identifier).
-
-Once the converter is done converting, the `sync-to-github.sh` script
-finishes the process by pushing the new commits to the `github-sync` branch
-of the `https://github.com/moz-gfx/<project-name>` repository,
-and generating a pull request against the downstream repository. It also
-leaves a comment on the PR that triggers testing and automatic merge of the PR.
-If there is already a pull request (perhaps from a previous run) the
-pre-existing PR is force-updated instead. This allows for graceful
-handling of scenarios where the PR failed to get merged (e.g. due to
-CI failures on the Github side).
-
-The script is intended to by run by taskcluster for any changes that
-touch the relative folder that land on `mozilla-central`. This may mean
-that multiple instances of this script run concurrently, or even out
-of order (i.e. the task for an older m-c push runs after the task for
-a newer m-c push). The script was written with these possibilities in
-mind and should be able to eventually recover from any such scenario
-automatically (although it may take additional changes to mozilla-central
-for such recovery to occur). That being said, the number of pathological
-scenarios here is quite large and they were not really tested.
-
-## Ownership and access
-
-When this tool is run in Firefox CI, it needs to have push permissions to
-the `moz-gfx` github user's account. It gets this permission via a secret token
-stored in the Firefox CI taskcluster secrets service. If you need to update
-the token, you need to find somebody who is a member of the
-[webrender-ci access group](https://people.mozilla.org/a/webrender-ci/). The
-Google Drive associated with that access group has additional documentation
-on the `moz-gfx` github user and the secret token.
-
-## Debugging
-
-To debug the converter.py script, you need to have a hg checkout of
-mozilla-central, let's assume it's at $MOZILLA. First create a virtualenv
-with the right dependencies installed:
-
-```
-mkdir -p $HOME/.ghsync
-virtualenv --python=python3 $HOME/.ghsync/venv
-source $HOME/.ghsync/venv/bin/activate
-pip3 install -r $MOZILLA/taskcluster/docker/github-sync/requirements.txt
-```
-
-Also create a checkout of the downstream github repo and set up a `github-sync`
-branch to the point where you want port commits to. For example, for WebRender
-you'd do:
-
-```
-cd $HOME/.ghsync
-git clone https://github.com/servo/webrender
-cd webrender
-git checkout -b github-sync master
-```
-
-(You can set the github-sync branch to a past revision if you want to replicate
-a failure that already got committed).
-
-Then run the converter from your hg checkout:
-
-```
-cd $MOZILLA
-tools/github-sync/converter.py $HOME/.ghsync/webrender gfx/wr
-```
-
-You can set the DEBUG variable in the script to True to get more output.
diff --git a/tools/github-sync/sync-to-github.sh b/tools/github-sync/sync-to-github.sh
deleted file mode 100755
index d677649748..0000000000
--- a/tools/github-sync/sync-to-github.sh
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/usr/bin/env bash
-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-# Do NOT set -x here, since that will expose a secret API token!
-set -o errexit
-set -o nounset
-set -o pipefail
-
-if [[ "$(uname)" != "Linux" ]]; then
- echo "Error: this script must be run on Linux due to readlink semantics"
- exit 1
-fi
-
-# GECKO_PATH should definitely be set
-if [[ -z "${GECKO_PATH}" ]]; then
- echo "Error: GECKO_PATH must point to a hg clone of mozilla-central"
- exit 1
-fi
-
-# Internal variables, don't fiddle with these
-MYSELF=$(readlink -f ${0})
-MYDIR=$(dirname "${MYSELF}")
-WORKDIR="${HOME}/.ghsync"
-TMPDIR="${WORKDIR}/tmp"
-
-NAME="$1"
-RELATIVE_PATH="$2"
-DOWNSTREAM_REPO="$3"
-BORS="$4"
-BRANCH="github-sync"
-
-mkdir -p "${TMPDIR}"
-
-# Bring the project clone to a known good up-to-date state
-if [[ ! -d "${WORKDIR}/${NAME}" ]]; then
- echo "Setting up ${NAME} repo..."
- git clone "https://github.com/${DOWNSTREAM_REPO}" "${WORKDIR}/${NAME}"
- pushd "${WORKDIR}/${NAME}"
- git remote add moz-gfx https://github.com/moz-gfx/${NAME}
- popd
-else
- echo "Updating ${NAME} repo..."
- pushd "${WORKDIR}/${NAME}"
- git checkout master
- git pull
- popd
-fi
-
-if [[ -n "${GITHUB_SECRET:-}" ]]; then
- echo "Obtaining github API token..."
- # Be careful, GITHUB_TOKEN is secret, so don't log it (or any variables
- # built using it).
- GITHUB_TOKEN=$(
- curl -sSfL "$TASKCLUSTER_PROXY_URL/secrets/v1/secret/${GITHUB_SECRET}" |
- ${MYDIR}/read-json.py "secret/token"
- )
- AUTH="moz-gfx:${GITHUB_TOKEN}"
- CURL_AUTH="Authorization: bearer ${GITHUB_TOKEN}"
-fi
-
-echo "Pushing base ${BRANCH} branch..."
-pushd "${WORKDIR}/${NAME}"
-git fetch moz-gfx
-git checkout -B ${BRANCH} moz-gfx/${BRANCH} || git checkout -B ${BRANCH} master
-
-if [[ -n "${GITHUB_SECRET:-}" ]]; then
- # git may emit error messages that contain the URL, so let's sanitize them
- # or we might leak the auth token to the task log.
- git push "https://${AUTH}@github.com/moz-gfx/${NAME}" \
- "${BRANCH}:${BRANCH}" 2>&1 | sed -e "s/${AUTH}/_SANITIZED_/g"
- # Re-fetch to update the remote moz-gfx/$BRANCH branch in the local repo;
- # normally the push does this but we use a fully-qualified URL for
- # pushing so it doesn't happen.
- git fetch moz-gfx
-fi
-popd
-
-# Run the converter
-echo "Running converter..."
-pushd "${GECKO_PATH}"
-"${MYDIR}/converter.py" "${WORKDIR}/${NAME}" "${RELATIVE_PATH}"
-popd
-
-# Check to see if we have changes that need pushing
-echo "Checking for new changes..."
-pushd "${WORKDIR}/${NAME}"
-PATCHCOUNT=$(git log --oneline moz-gfx/${BRANCH}..${BRANCH}| wc -l)
-if [[ ${PATCHCOUNT} -eq 0 ]]; then
- echo "No new patches found, aborting..."
- exit 0
-fi
-
-# Log the new changes, just for logging purposes
-echo "Here are the new changes:"
-git log --graph --stat moz-gfx/${BRANCH}..${BRANCH}
-
-# Collect PR numbers of PRs opened on Github and merged to m-c
-set +e
-FIXES=$(
- git log master..${BRANCH} |
- grep "\[import_pr\] From https://github.com/${DOWNSTREAM_REPO}/pull" |
- sed -e "s%.*pull/% Fixes #%" |
- uniq |
- tr '\n' ','
-)
-echo "${FIXES}"
-set -e
-
-if [[ -z "${GITHUB_SECRET:-}" ]]; then
- echo "Running in try push, exiting now"
- exit 0
-fi
-
-echo "Pushing new changes to moz-gfx..."
-# git may emit error messages that contain the URL, so let's sanitize them
-# or we might leak the auth token to the task log.
-git push "https://${AUTH}@github.com/moz-gfx/${NAME}" +${BRANCH}:${BRANCH} \
- 2>&1 | sed -e "s/${AUTH}/_SANITIZED_/g"
-
-CURL_HEADER="Accept: application/vnd.github.v3+json"
-CURL=(curl -sSfL -H "${CURL_HEADER}" -H "${CURL_AUTH}")
-# URL extracted here mostly to make servo-tidy happy with line lengths
-API_URL="https://api.github.com/repos/${DOWNSTREAM_REPO}"
-
-# Check if there's an existing PR open
-echo "Listing pre-existing pull requests..."
-"${CURL[@]}" "${API_URL}/pulls?head=moz-gfx:${BRANCH}" |
- tee "${TMPDIR}/pr.get"
-set +e
-COMMENT_URL=$(cat "${TMPDIR}/pr.get" | ${MYDIR}/read-json.py "0/comments_url")
-HAS_COMMENT_URL="${?}"
-set -e
-
-if [[ ${HAS_COMMENT_URL} -ne 0 ]]; then
- echo "Pull request not found, creating..."
- # The PR doesn't exist yet, so let's create it
- ( echo -n '{ "title": "Sync changes from mozilla-central '"${RELATIVE_PATH}"'"'
- echo -n ', "body": "'"${FIXES}"'"'
- echo -n ', "head": "moz-gfx:'"${BRANCH}"'"'
- echo -n ', "base": "master" }'
- ) > "${TMPDIR}/pr.create"
- "${CURL[@]}" -d "@${TMPDIR}/pr.create" "${API_URL}/pulls" |
- tee "${TMPDIR}/pr.response"
- COMMENT_URL=$(
- cat "${TMPDIR}/pr.response" |
- ${MYDIR}/read-json.py "comments_url"
- )
-fi
-
-# At this point COMMENTS_URL should be set, so leave a comment to tell bors
-# to merge the PR.
-echo "Posting r+ comment to ${COMMENT_URL}..."
-echo '{ "body": "'"$BORS"' r=auto" }' > "${TMPDIR}/bors_rplus"
-"${CURL[@]}" -d "@${TMPDIR}/bors_rplus" "${COMMENT_URL}"
-
-echo "All done!"
diff --git a/tools/lint/condprof-addons.yml b/tools/lint/condprof-addons.yml
index a62c1fb6b9..b85deda7bc 100644
--- a/tools/lint/condprof-addons.yml
+++ b/tools/lint/condprof-addons.yml
@@ -5,6 +5,6 @@ condprof-addons:
- 'testing/condprofile/condprof/customization'
exclude: []
extensions: ['json']
- support-files: ['taskcluster/ci/fetch/browsertime.yml']
+ support-files: ['taskcluster/kinds/fetch/browsertime.yml']
type: structured_log
payload: condprof-addons:lint
diff --git a/tools/lint/condprof-addons/__init__.py b/tools/lint/condprof-addons/__init__.py
index f17ab26f3f..c569a4d8dc 100644
--- a/tools/lint/condprof-addons/__init__.py
+++ b/tools/lint/condprof-addons/__init__.py
@@ -13,7 +13,7 @@ import requests
import yaml
from mozlint.pathutils import expand_exclusions
-BROWSERTIME_FETCHES_PATH = Path("taskcluster/ci/fetch/browsertime.yml")
+BROWSERTIME_FETCHES_PATH = Path("taskcluster/kinds/fetch/browsertime.yml")
CUSTOMIZATIONS_PATH = Path("testing/condprofile/condprof/customization/")
DOWNLOAD_TIMEOUT = 30
ERR_FETCH_TASK_MISSING = "firefox-addons taskcluster fetch config section not found"
diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
index 036ed1bda3..003311f623 100644
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
@@ -55,7 +55,6 @@ module.exports = {
files: ["**/*.sys.mjs", "**/*.jsm"],
rules: {
"mozilla/lazy-getter-object-name": "error",
- "mozilla/reject-chromeutils-import": "error",
"mozilla/reject-eager-module-in-lazy-getter": "error",
"mozilla/reject-global-this": "error",
"mozilla/reject-globalThis-modification": "error",
@@ -180,6 +179,7 @@ module.exports = {
"mozilla/prefer-boolean-length-check": "error",
"mozilla/prefer-formatValues": "error",
"mozilla/reject-addtask-only": "error",
+ "mozilla/reject-chromeutils-import": "error",
"mozilla/reject-chromeutils-import-params": "error",
"mozilla/reject-importGlobalProperties": ["error", "allownonwebidl"],
"mozilla/reject-multiple-getters-calls": "error",
diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/privileged.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/privileged.js
index 7e6437ce7a..f0bd1aa8b8 100644
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/privileged.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/privileged.js
@@ -317,6 +317,7 @@ module.exports = {
ImageData: false,
ImageDocument: false,
InputEvent: false,
+ InspectorCSSParser: false,
InspectorFontFace: false,
InspectorUtils: false,
InstallTriggerImpl: false,
diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/special-powers-sandbox.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/special-powers-sandbox.js
index 5a28c91883..2ef47d89e0 100644
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/special-powers-sandbox.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/special-powers-sandbox.js
@@ -35,6 +35,7 @@ module.exports = {
assert: false,
Assert: false,
BrowsingContext: false,
+ InspectorCSSParser: false,
InspectorUtils: false,
ok: false,
is: false,
diff --git a/tools/lint/license.yml b/tools/lint/license.yml
index 34e1eb817c..00490b3028 100644
--- a/tools/lint/license.yml
+++ b/tools/lint/license.yml
@@ -26,13 +26,6 @@ license:
- config/external/nspr/_pr_bld.h
# Unknown origin
- gfx/2d/MMIHelpers.h
- # might not work with license
- - gradle.properties
- # might not work with license
- - gradle/wrapper/gradle-wrapper.properties
- - mobile/android/android-components/gradle/wrapper/gradle-wrapper.properties
- - mobile/android/fenix/gradle/wrapper/gradle-wrapper.properties
- - mobile/android/focus-android/gradle/wrapper/gradle-wrapper.properties
# ICU4X data
- intl/icu_segmenter_data
# Imported code that is dual Apache2 / MIT licensed
@@ -44,52 +37,8 @@ license:
- mobile/android/geckoview_example/src/main
- testing/webcompat/interventions/
- testing/webcompat/shims/
- # TODO - Bug 1881094: temporarily ignored for firefox-android migration
- - mobile/android/android-components/components/browser/engine-system/src/main/res/
- - mobile/android/android-components/components/browser/errorpages/src/main/res/
- - mobile/android/android-components/components/browser/menu/src/main/res/
- - mobile/android/android-components/components/browser/menu2/src/main/res/
- - mobile/android/android-components/components/browser/toolbar/src/main/res/
- - mobile/android/android-components/components/compose/awesomebar/src/main/res/
- - mobile/android/android-components/components/compose/browser-toolbar/src/main/res/
- - mobile/android/android-components/components/compose/cfr/src/main/res/
- - mobile/android/android-components/components/compose/tabstray/src/main/res/
- - mobile/android/android-components/components/feature/addons/src/main/res/
- - mobile/android/android-components/components/feature/app-links/src/main/res/
- - mobile/android/android-components/components/feature/autofill/src/main/res/
- - mobile/android/android-components/components/feature/awesomebar/src/main/res/
- - mobile/android/android-components/components/feature/contextmenu/src/main/res/
- - mobile/android/android-components/components/feature/customtabs/src/main/res/
- - mobile/android/android-components/components/feature/downloads/src/main/res/
- - mobile/android/android-components/components/feature/findinpage/src/main/res/
- - mobile/android/android-components/components/feature/fxsuggest/src/main/res/
- - mobile/android/android-components/components/feature/media/src/main/res/
- - mobile/android/android-components/components/feature/privatemode/src/main/res/
- - mobile/android/android-components/components/feature/prompts/src/main/res/
- - mobile/android/android-components/components/feature/pwa/src/main/res/
- - mobile/android/android-components/components/feature/qr/src/main/res/
- - mobile/android/android-components/components/feature/readerview/src/main/res/
- - mobile/android/android-components/components/feature/search/src/main/res/
- - mobile/android/android-components/components/feature/sitepermissions/
- - mobile/android/android-components/components/feature/tabs/src/main/res/
- - mobile/android/android-components/components/feature/webcompat/src/main/assets/extensions/webcompat/injections/
- - mobile/android/android-components/components/feature/webnotifications/src/main/res/
- - mobile/android/android-components/components/lib/crash/src/main/res/
- - mobile/android/android-components/components/service/nimbus/src/main/res/
- - mobile/android/android-components/components/support/base/src/main/res/
- - mobile/android/android-components/components/support/ktx/src/main/res/
- - mobile/android/android-components/components/support/utils/src/main/res/
- - mobile/android/android-components/components/ui/tabcounter/src/main/res/
- - mobile/android/android-components/components/ui/widgets/src/main/res/
+ # TODO - Bug 1882443: temporarily ignored for firefox-android migration
- mobile/android/android-components/docs/
- - mobile/android/fenix/app/src/main/res/
- - mobile/android/fenix/benchmark/src/main/AndroidManifest.xml
- - mobile/android/focus-android/app/lint-baseline.xml
- - mobile/android/focus-android/app/src/main/res/
- # might not work with license
- - mobile/android/gradle/dotgradle-offline/gradle.properties
- # might not work with license
- - mobile/android/gradle/dotgradle-online/gradle.properties
# Almost empty file
- modules/libpref/greprefs.js
- parser/html/java/named-character-references.html
diff --git a/tools/lint/perfdocs.yml b/tools/lint/perfdocs.yml
index 175781ad00..62d6b40897 100644
--- a/tools/lint/perfdocs.yml
+++ b/tools/lint/perfdocs.yml
@@ -12,7 +12,7 @@ perfdocs:
'dom/indexedDB/test',
]
exclude: []
- extensions: ['rst', 'ini', 'yml']
+ extensions: []
support-files: []
type: structured_log
payload: perfdocs:lint
diff --git a/tools/lint/perfdocs/framework_gatherers.py b/tools/lint/perfdocs/framework_gatherers.py
index 3c0a4026d9..c875b2a2c8 100644
--- a/tools/lint/perfdocs/framework_gatherers.py
+++ b/tools/lint/perfdocs/framework_gatherers.py
@@ -51,6 +51,38 @@ class FrameworkGatherer(object):
self._task_list = {}
self._task_match_pattern = re.compile(r"([\w\W]*/[pgo|opt]*)-([\w\W]*)")
+ def _build_section_with_header(self, title, content, header_type=None):
+ """
+ Adds a section to the documentation with the title as the type mentioned
+ and paragraph as content mentioned.
+ :param title: title of the section
+ :param content: content of section paragraph
+ :param header_type: type of the title heading
+ """
+ heading_map = {"H2": "*", "H3": "=", "H4": "-", "H5": "^"}
+ return [title, heading_map.get(header_type, "^") * len(title), content, ""]
+
+ def _get_metric_heading(self, metric, metrics_info):
+ """
+ Gets the heading of a specific metric.
+
+ :param str metric: The metric to search for.
+ :param dict metrics_info: The information of all the
+ metrics that were documented.
+ :return str: The heading to use for the given metric.
+ """
+ for metric_heading, metric_info in metrics_info.items():
+ if metric == metric_heading or any(
+ metric == alias for alias in metric_info.get("aliases", [])
+ ):
+ return metric_heading
+ if metric_info.get("matcher"):
+ match = re.search(metric_info["matcher"], metric)
+ if match:
+ return metric_heading
+
+ raise Exception(f"Could not find a metric heading for `{metric}`")
+
def get_task_match(self, task_name):
return re.search(self._task_match_pattern, task_name)
@@ -85,16 +117,23 @@ class FrameworkGatherer(object):
"""
raise NotImplementedError
- def _build_section_with_header(self, title, content, header_type=None):
+ def build_metrics_documentation(self, yaml_content):
"""
- Adds a section to the documentation with the title as the type mentioned
- and paragraph as content mentioned.
- :param title: title of the section
- :param content: content of section paragraph
- :param header_type: type of the title heading
+ Each framework that provides a page with descriptions about the
+ metrics it produces must implement this method. The metrics defined
+ for the framework can be found in the `yaml_content` variable.
+
+ The framework gatherer is expected to produce the full documentation
+ for all the metrics defined in the yaml_content at once. This is done
+ to allow differentiation between how metrics are displayed between
+ the different frameworks.
+
+ :param dict yaml_content: A dictionary of the YAML config file for
+ the specific framework.
+ :return list: A list of all the lines being added to the metrics
+ documentation.
"""
- heading_map = {"H2": "*", "H3": "=", "H4": "-", "H5": "^"}
- return [title, heading_map.get(header_type, "^") * len(title), content, ""]
+ raise NotImplementedError
class RaptorGatherer(FrameworkGatherer):
@@ -167,7 +206,9 @@ class RaptorGatherer(FrameworkGatherer):
:return list: the list of the tests
"""
desc_exclusion = ["here", "manifest_relpath", "path", "relpath"]
- test_manifest = TestManifest([str(manifest_path)], strict=False, document=True)
+ test_manifest = TestManifest(
+ [str(manifest_path)], strict=False, document=True, add_line_no=True
+ )
test_list = test_manifest.active_tests(exists=False, disabled=False)
subtests = {}
for subtest in test_list:
@@ -206,6 +247,21 @@ class RaptorGatherer(FrameworkGatherer):
return subtests
+ def _get_metric_heading(self, metric, metrics_info):
+ """
+ Finds, and returns the correct heading for a metric to target in a reference link.
+
+ :param str metric: The metric to search for.
+ :param dict metrics_info: The information of all the
+ metrics that were documented.
+ :return str: A formatted string containing the reference link to the
+ documented metric.
+ """
+ metric_heading = super(RaptorGatherer, self)._get_metric_heading(
+ metric, metrics_info
+ )
+ return f"`{metric} <raptor-metrics.html#{metric_heading.lower().replace(' ', '-')}>`__"
+
def get_test_list(self):
"""
Returns a dictionary containing the tests in every suite ini file.
@@ -235,7 +291,9 @@ class RaptorGatherer(FrameworkGatherer):
return self._test_list
- def build_test_description(self, title, test_description="", suite_name=""):
+ def build_test_description(
+ self, title, test_description="", suite_name="", metrics_info=None
+ ):
matcher = []
browsers = [
"firefox",
@@ -292,6 +350,18 @@ class RaptorGatherer(FrameworkGatherer):
f" * **{sub_title}**: "
f"{description[key].replace('{subtest}', description['name'])}\n"
)
+ elif key == "alert_on":
+ result += (
+ f" * **{sub_title}**: "
+ + ", ".join(
+ self._get_metric_heading(metric.strip(), metrics_info)
+ for metric in description[key]
+ .replace("\n", " ")
+ .replace(",", " ")
+ .split()
+ )
+ + "\n"
+ )
else:
if "\n" in description[key]:
description[key] = description[key].replace("\n", " ")
@@ -328,6 +398,39 @@ class RaptorGatherer(FrameworkGatherer):
title.capitalize(), content, header_type="H4"
)
+ def build_metrics_documentation(self, parsed_metrics):
+ metrics_documentation = []
+ for metric, metric_info in sorted(
+ parsed_metrics.items(), key=lambda item: item[0]
+ ):
+ metric_content = metric_info["description"] + "\n\n"
+
+ metric_content += (
+ f" * **Aliases**: {', '.join(sorted(metric_info['aliases']))}\n"
+ )
+ metric_content += " * **Tests using it**:\n"
+
+ for suite, tests in sorted(
+ metric_info["location"].items(), key=lambda item: item[0]
+ ):
+ metric_content += f" * **{suite.capitalize()}**: "
+
+ test_links = []
+ for test in sorted(tests):
+ test_links.append(
+ f"`{test} <raptor.html#{test}-{suite.lower()[0]}>`__"
+ )
+
+ metric_content += ", ".join(test_links) + "\n"
+
+ metrics_documentation.extend(
+ self._build_section_with_header(
+ metric, metric_content, header_type="H3"
+ )
+ )
+
+ return metrics_documentation
+
class MozperftestGatherer(FrameworkGatherer):
"""
@@ -371,7 +474,9 @@ class MozperftestGatherer(FrameworkGatherer):
return self._test_list
- def build_test_description(self, title, test_description="", suite_name=""):
+ def build_test_description(
+ self, title, test_description="", suite_name="", metrics_info=None
+ ):
return [str(self.script_infos[title])]
def build_suite_section(self, title, content):
@@ -428,7 +533,9 @@ class TalosGatherer(FrameworkGatherer):
return self._test_list
- def build_test_description(self, title, test_description="", suite_name=""):
+ def build_test_description(
+ self, title, test_description="", suite_name="", metrics_info=None
+ ):
result = f".. dropdown:: {title}\n"
result += f" :class-container: anchor-id-{title}\n\n"
@@ -548,7 +655,9 @@ class AwsyGatherer(FrameworkGatherer):
title.capitalize(), content, header_type="H4"
)
- def build_test_description(self, title, test_description="", suite_name=""):
+ def build_test_description(
+ self, title, test_description="", suite_name="", metrics_info=None
+ ):
dropdown_suite_name = suite_name.replace(" ", "-")
result = f".. dropdown:: {title} ({test_description})\n"
result += f" :class-container: anchor-id-{title}-{dropdown_suite_name}\n\n"
diff --git a/tools/lint/perfdocs/gatherer.py b/tools/lint/perfdocs/gatherer.py
index 828c2f7f2b..89f03cfdbb 100644
--- a/tools/lint/perfdocs/gatherer.py
+++ b/tools/lint/perfdocs/gatherer.py
@@ -87,6 +87,9 @@ class Gatherer(object):
if any(d in str(path.resolve()) for d in exclude_dir):
continue
files = [f for f in os.listdir(path)]
+
+ # Metrics are optional so it's only added to the matched if we
+ # find the `metrics.rst` file in the perfdocs folder
matched = {"path": str(path), "yml": "", "rst": "", "static": []}
for file in files:
@@ -95,6 +98,8 @@ class Gatherer(object):
matched["yml"] = file
elif file == "index.rst":
matched["rst"] = file
+ elif file == "metrics.rst":
+ matched["metrics"] = file
elif file.split(".")[-1] in ALLOWED_STATIC_FILETYPES:
matched["static"].append(file)
diff --git a/tools/lint/perfdocs/generator.py b/tools/lint/perfdocs/generator.py
index 3f3a0acefa..240468d62c 100644
--- a/tools/lint/perfdocs/generator.py
+++ b/tools/lint/perfdocs/generator.py
@@ -70,6 +70,17 @@ class Generator(object):
rst_content = read_file(
pathlib.Path(framework["path"], framework["rst"]), stringify=True
)
+ gatherer = self._verifier._gatherer.framework_gatherers[
+ yaml_content["name"]
+ ]
+
+ metrics_rst_content = None
+ metrics_info = self._verifier.metrics_info[yaml_content["name"]]
+ if framework.get("metrics"):
+ metrics_rst_content = read_file(
+ pathlib.Path(framework["path"], framework["metrics"]),
+ stringify=True,
+ )
# Gather all tests and descriptions and format them into
# documentation content
@@ -87,21 +98,41 @@ class Generator(object):
tests = suite_info.get("tests", {})
for test_name in sorted(tests.keys()):
- gatherer = self._verifier._gatherer.framework_gatherers[
- yaml_content["name"]
- ]
test_description = gatherer.build_test_description(
- test_name, tests[test_name], suite_name
+ test_name,
+ test_description=tests[test_name],
+ suite_name=suite_name,
+ metrics_info=metrics_info,
)
documentation.extend(test_description)
documentation.append("")
+ # For each framework, we may want to organize the metrics differently
+ # so delegate the complete setup of the metric documentation to the
+ # framework-specific gatherers
+ metrics_rst = ""
+ if metrics_rst_content:
+ metrics_documentation = gatherer.build_metrics_documentation(
+ metrics_info
+ )
+ metrics_rst = re.sub(
+ r"{metrics_documentation}",
+ "\n".join(metrics_documentation),
+ metrics_rst_content,
+ )
+ rst_content = re.sub(
+ r"{metrics_rst_name}",
+ f"{yaml_content['name']}-metrics",
+ rst_content,
+ )
+
# Insert documentation into `.rst` file
framework_rst = re.sub(
r"{documentation}", "\n".join(documentation), rst_content
)
frameworks_info[yaml_content["name"]] = {
"dynamic": framework_rst,
+ "metrics": metrics_rst,
"static": [],
}
@@ -165,6 +196,12 @@ class Generator(object):
pathlib.Path(perfdocs_tmpdir, framework_name),
)
+ if framework_docs[framework_name]["metrics"]:
+ save_file(
+ framework_docs[framework_name]["metrics"],
+ pathlib.Path(perfdocs_tmpdir, f"{framework_name}-metrics"),
+ )
+
for static_name in framework_docs[framework_name]["static"]:
if static_name["file"].endswith(".rst"):
# XXX Replace this with a shutil.copy call (like below)
@@ -266,16 +303,15 @@ class Generator(object):
perfdocs_tmpdir = self._create_perfdocs()
if self._generate:
self._save_perfdocs(perfdocs_tmpdir)
- else:
+ elif not are_dirs_equal(perfdocs_tmpdir, self.perfdocs_path):
# If we are not generating, then at least check if they
# should be regenerated by comparing the directories.
- if not are_dirs_equal(perfdocs_tmpdir, self.perfdocs_path):
- logger.warning(
- "PerfDocs are outdated, run ./mach lint -l perfdocs --fix .` "
- + "to update them. You can also apply the "
- + f"{'perfdocs.diff' if ON_TRY else 'diff.txt'} patch file "
- + f"{'produced from this reviewbot test ' if ON_TRY else ''}"
- + "to fix the issue.",
- files=get_changed_files(self._workspace),
- restricted=False,
- )
+ logger.warning(
+ "PerfDocs are outdated, run ./mach lint -l perfdocs --fix .` "
+ + "to update them. You can also apply the "
+ + f"{'perfdocs.diff' if ON_TRY else 'diff.txt'} patch file "
+ + f"{'produced from this reviewbot test ' if ON_TRY else ''}"
+ + "to fix the issue.",
+ files=get_changed_files(self._workspace),
+ restricted=False,
+ )
diff --git a/tools/lint/perfdocs/verifier.py b/tools/lint/perfdocs/verifier.py
index 0f39e3a047..5f0b62cbf2 100644
--- a/tools/lint/perfdocs/verifier.py
+++ b/tools/lint/perfdocs/verifier.py
@@ -63,12 +63,10 @@ CONFIG_SCHEMA = {
"type": "object",
"properties": {
"test_name": {"type": "string"},
- "metrics": {"$ref": "#/definitions/metrics_schema"},
},
},
"description": {"type": "string"},
"owner": {"type": "string"},
- "metrics": {"$ref": "#/definitions/metrics_schema"},
},
"required": ["description"],
}
@@ -93,6 +91,7 @@ class Verifier(object):
:param str workspace_dir: Path to the top-level checkout directory.
"""
self.workspace_dir = workspace_dir
+ self.metrics_info = {}
self._gatherer = Gatherer(workspace_dir, taskgraph)
self._compiled_matchers = {}
@@ -242,104 +241,32 @@ class Verifier(object):
the test harness as real metrics. Failures here suggest that a metric
changed name, is missing an alias, is misnamed, duplicated, or was removed.
"""
- yaml_suite = yaml_content["suites"][suite]
- suite_metrics = yaml_suite.get("metrics", {})
-
- # Check to make sure all the metrics with given descriptions
- # are actually being measured. Add the metric to the "verified" field in
- # global_metrics to use it later for "global" metrics that can
- # have their descriptions removed. Start from the test level.
- for test_name, test_info in yaml_suite.get("tests", {}).items():
- if not isinstance(test_info, dict):
- continue
- test_metrics_info = test_info.get("metrics", {})
-
- # Find all tests that match with this name in case they measure
- # different things
- measured_metrics = []
- for t in framework_info["test_list"][suite]:
- if not self._is_yaml_test_match(t, test_name):
- # Check to make sure we are checking against the right
- # test. Skip the metric check if we can't find the test.
- continue
- measured_metrics.extend(
- framework_info["test_list"][suite][t].get("metrics", [])
- )
-
- if len(measured_metrics) == 0:
- continue
-
- # Check if all the test metrics documented exist
- for metric_name, metric_info in test_metrics_info.items():
+ for global_metric_name, global_metric_info in global_metrics["global"].items():
+ for test, test_info in framework_info["test_list"][suite].items():
verified_metrics = self._match_metrics(
- metric_name, metric_info, measured_metrics
+ global_metric_name, global_metric_info, test_info.get("metrics", [])
)
- if len(verified_metrics) > 0:
+ if len(verified_metrics) == 0:
+ continue
+
+ if global_metric_info.get("verified", False):
+ # We already verified this global metric, but add any
+ # extra verified metrics here
+ global_metrics["verified"].extend(verified_metrics)
+ else:
+ global_metric_info["verified"] = True
global_metrics["yaml-verified"].extend(
- [metric_name] + metric_info["aliases"]
+ [global_metric_name] + global_metric_info["aliases"]
)
global_metrics["verified"].extend(
- [metric_name] + metric_info["aliases"] + verified_metrics
- )
- else:
- logger.warning(
- (
- "Cannot find documented metric `{}` "
- "being used in the specified test `{}`."
- ).format(metric_name, test_name),
- framework_info["yml_path"],
+ [global_metric_name]
+ + global_metric_info["aliases"]
+ + verified_metrics
)
- # Check the suite level now
- for suite_metric_name, suite_metric_info in suite_metrics.items():
- measured_metrics = []
- for _, test_info in framework_info["test_list"][suite].items():
- measured_metrics.extend(test_info.get("metrics", []))
-
- verified_metrics = self._match_metrics(
- suite_metric_name, suite_metric_info, measured_metrics
- )
- if len(verified_metrics) > 0:
- global_metrics["yaml-verified"].extend(
- [suite_metric_name] + suite_metric_info["aliases"]
- )
- global_metrics["verified"].extend(
- [suite_metric_name]
- + suite_metric_info["aliases"]
- + verified_metrics
- )
- else:
- logger.warning(
- (
- "Cannot find documented metric `{}` "
- "being used in the specified suite `{}`."
- ).format(suite_metric_name, suite),
- framework_info["yml_path"],
- )
-
- # Finally check the global level (output failures later)
- all_measured_metrics = []
- for _, test_info in framework_info["test_list"][suite].items():
- all_measured_metrics.extend(test_info.get("metrics", []))
- for global_metric_name, global_metric_info in global_metrics["global"].items():
- verified_metrics = self._match_metrics(
- global_metric_name, global_metric_info, all_measured_metrics
- )
- if global_metric_info.get("verified", False):
- # We already verified this global metric, but add any
- # extra verified metrics here
- global_metrics["verified"].extend(verified_metrics)
- continue
- if len(verified_metrics) > 0:
- global_metric_info["verified"] = True
- global_metrics["yaml-verified"].extend(
- [global_metric_name] + global_metric_info["aliases"]
- )
- global_metrics["verified"].extend(
- [global_metric_name]
- + global_metric_info["aliases"]
- + verified_metrics
- )
+ global_metric_info.setdefault("location", {}).setdefault(
+ suite, []
+ ).append(test)
def _validate_metrics_harness_direction(
self, suite, test_list, yaml_content, global_metrics
@@ -484,6 +411,8 @@ class Verifier(object):
suite, test_list, yaml_content, global_metrics
)
+ self.metrics_info[framework_info["name"]] = global_metrics["global"]
+
def validate_yaml(self, yaml_path):
"""
Validate that the YAML file has all the fields that are
@@ -532,10 +461,10 @@ class Verifier(object):
return valid
- def validate_rst_content(self, rst_path):
+ def validate_rst_content(self, rst_path, expected_str):
"""
- Validate that the index file given has a {documentation} entry
- so that the documentation can be inserted there.
+ Validate that a given RST has the expected string in it
+ so that the generated documentation can be inserted there.
:param str rst_path: Path to the RST file.
:return bool: True/False => Passed/Failed Validation
@@ -545,14 +474,14 @@ class Verifier(object):
# Check for a {documentation} entry in some line,
# if we can't find one, then the validation fails.
valid = False
- docs_match = re.compile(".*{documentation}.*")
+ docs_match = re.compile(f".*{expected_str}.*")
for line in rst_content:
if docs_match.search(line):
valid = True
break
if not valid:
logger.warning( # noqa: PLE1205
- "Cannot find a '{documentation}' entry in the given index file",
+ f"Cannot find a '{expected_str}' entry in the given index file",
rst_path,
)
@@ -583,9 +512,18 @@ class Verifier(object):
_valid_files = {
"yml": self.validate_yaml(matched_yml),
"rst": True,
+ "metrics": True,
}
if not read_yaml(matched_yml)["static-only"]:
- _valid_files["rst"] = self.validate_rst_content(matched_rst)
+ _valid_files["rst"] = self.validate_rst_content(
+ matched_rst, "{documentation}"
+ )
+
+ if matched.get("metrics"):
+ _valid_files["metrics"] = self.validate_rst_content(
+ pathlib.Path(matched["path"], matched["metrics"]),
+ "{metrics_documentation}",
+ )
# Log independently the errors found for the matched files
for file_format, valid in _valid_files.items():
diff --git a/tools/lint/python/l10n_lint.py b/tools/lint/python/l10n_lint.py
index 158cb5f7e6..2ba2278d22 100644
--- a/tools/lint/python/l10n_lint.py
+++ b/tools/lint/python/l10n_lint.py
@@ -40,15 +40,14 @@ def lint_strings(name, paths, lintconfig, **lintargs):
extensions = lintconfig.get("extensions")
# Load l10n.toml configs
- l10nconfigs = load_configs(lintconfig, root, l10n_base, name)
+ l10nconfigs = load_configs(lintconfig["l10n_configs"], root, l10n_base, name)
- # Check include paths in l10n.yml if it's in our given paths
- # Only the l10n.yml will show up here, but if the l10n.toml files
- # change, we also get the l10n.yml as the toml files are listed as
- # support files.
+ # If l10n.yml is included in the provided paths, validate it against the
+ # TOML files, then remove it to avoid parsing it as a localizable resource.
if lintconfig["path"] in paths:
results = validate_linter_includes(lintconfig, l10nconfigs, lintargs)
paths.remove(lintconfig["path"])
+ lintconfig["include"].remove(mozpath.relpath(lintconfig["path"], root))
else:
results = []
@@ -60,8 +59,7 @@ def lint_strings(name, paths, lintconfig, **lintargs):
all_files.append(fileobj.path)
if fp.isfile:
all_files.append(p)
- # Filter again, our directories might have picked up files the
- # explicitly excluded in the l10n.yml configuration.
+ # Filter out files explicitly excluded in the l10n.yml configuration.
# `browser/locales/en-US/firefox-l10n.js` is a good example.
all_files, _ = pathutils.filterpaths(
lintargs["root"],
@@ -70,7 +68,8 @@ def lint_strings(name, paths, lintconfig, **lintargs):
exclude=exclude,
extensions=extensions,
)
- # These should be excluded in l10n.yml
+ # Filter again, our directories might have picked up files that should be
+ # excluded in l10n.yml
skips = {p for p in all_files if not parser.hasParser(p)}
results.extend(
result.from_config(
@@ -142,11 +141,11 @@ def strings_repo_setup(repo: str, name: str):
fh.flush()
-def load_configs(lintconfig, root, l10n_base, locale):
+def load_configs(l10n_configs, root, l10n_base, locale):
"""Load l10n configuration files specified in the linter configuration."""
configs = []
env = {"l10n_base": l10n_base}
- for toml in lintconfig["l10n_configs"]:
+ for toml in l10n_configs:
cfg = TOMLParser().parse(
mozpath.join(root, toml), env=env, ignore_missing_includes=True
)
diff --git a/tools/lint/rejected-words.yml b/tools/lint/rejected-words.yml
index ed9e8c9d60..6a809930ec 100644
--- a/tools/lint/rejected-words.yml
+++ b/tools/lint/rejected-words.yml
@@ -213,7 +213,7 @@ avoid-blacklist-and-whitelist:
- security/sandbox/linux/SandboxFilter.cpp
- security/sandbox/linux/SandboxFilterUtil.h
- security/sandbox/linux/Sandbox.h
- - taskcluster/ci/docker-image/kind.yml
+ - taskcluster/kinds/docker-image/kind.yml
- taskcluster/gecko_taskgraph/actions/create_interactive.py
- taskcluster/gecko_taskgraph/transforms/test/other.py
- taskcluster/gecko_taskgraph/try_option_syntax.py
diff --git a/tools/lint/test/conftest.py b/tools/lint/test/conftest.py
index ad88f8aa97..94ac511804 100644
--- a/tools/lint/test/conftest.py
+++ b/tools/lint/test/conftest.py
@@ -260,6 +260,7 @@ def perfdocs_sample():
DYNAMIC_SAMPLE_CONFIG,
SAMPLE_CONFIG,
SAMPLE_INI,
+ SAMPLE_METRICS_CONFIG,
SAMPLE_TEST,
temp_dir,
temp_file,
@@ -291,7 +292,11 @@ def perfdocs_sample():
) as tmpconfig, temp_file(
"config_2.yml", tempdir=perfdocs_dir, content=DYNAMIC_SAMPLE_CONFIG
) as tmpconfig_2, temp_file(
- "index.rst", tempdir=perfdocs_dir, content="{documentation}"
+ "config_metrics.yml", tempdir=perfdocs_dir, content=SAMPLE_METRICS_CONFIG
+ ) as tmpconfig_metrics, temp_file(
+ "index.rst",
+ tempdir=perfdocs_dir,
+ content="{metrics_rst_name}{documentation}",
) as tmpindex:
yield {
"top_dir": tmpdir,
@@ -301,5 +306,6 @@ def perfdocs_sample():
"test": tmptest,
"config": tmpconfig,
"config_2": tmpconfig_2,
+ "config_metrics": tmpconfig_metrics,
"index": tmpindex,
}
diff --git a/tools/lint/test/test_perfdocs.py b/tools/lint/test/test_perfdocs.py
index 4ee834ad68..5a12c82d4d 100644
--- a/tools/lint/test/test_perfdocs.py
+++ b/tools/lint/test/test_perfdocs.py
@@ -85,11 +85,32 @@ suites:
SAMPLE_METRICS_CONFIG = """
name: raptor
+manifest: "None"
+metrics:
+ 'test':
+ aliases: [t1, t2]
+ description: a description
+ matcher: f.*|S.*
+static-only: False
+suites:
+ suite:
+ description: "Performance tests from the 'suite' folder."
+ tests:
+ Example: "Performance test Example from another_suite."
+ another_suite:
+ description: "Performance tests from the 'another_suite' folder."
+ tests:
+ Example: "Performance test Example from another_suite."
+"""
+
+
+DYNAMIC_METRICS_CONFIG = """
+name: raptor
manifest: "None"{}
static-only: False
suites:
suite:
- description: "Performance tests from the 'suite' folder."{}
+ description: "Performance tests from the 'suite' folder."
tests:
Example: "Performance test Example from another_suite."
another_suite:
@@ -324,7 +345,9 @@ def test_perfdocs_verifier_validate_rst_pass(
from perfdocs.verifier import Verifier
- valid = Verifier(top_dir).validate_rst_content(pathlib.Path(rst_path))
+ valid = Verifier(top_dir).validate_rst_content(
+ pathlib.Path(rst_path), expected_str="{documentation}"
+ )
assert valid
@@ -347,7 +370,7 @@ def test_perfdocs_verifier_invalid_rst(logger, structured_logger, perfdocs_sampl
from perfdocs.verifier import Verifier
verifier = Verifier("top_dir")
- valid = verifier.validate_rst_content(rst_path)
+ valid = verifier.validate_rst_content(rst_path, expected_str="{documentation}")
expected = (
"Cannot find a '{documentation}' entry in the given index file",
@@ -532,7 +555,7 @@ def test_perfdocs_verifier_nonexistent_documented_metrics(
setup_sample_logger(logger, structured_logger, top_dir)
with open(perfdocs_sample["config"], "w", newline="\n") as f:
- f.write(SAMPLE_METRICS_CONFIG.format(metric_definitions, ""))
+ f.write(DYNAMIC_METRICS_CONFIG.format(metric_definitions, ""))
with open(perfdocs_sample["manifest"]["path"], "w", newline="\n") as f:
f.write(manifest)
@@ -587,7 +610,7 @@ def test_perfdocs_verifier_undocumented_metrics(
setup_sample_logger(logger, structured_logger, top_dir)
with open(perfdocs_sample["config"], "w", newline="\n") as f:
- f.write(SAMPLE_METRICS_CONFIG.format(metric_definitions, ""))
+ f.write(DYNAMIC_METRICS_CONFIG.format(metric_definitions, ""))
with open(perfdocs_sample["manifest"]["path"], "w", newline="\n") as f:
f.write(manifest)
@@ -619,6 +642,13 @@ metrics:
aliases:
- fcp
- SpeedIndex
+ - SpeedIndex2
+ description: "Example"
+ "FirstPaint2":
+ aliases:
+ - fcp
+ - SpeedIndex
+ - SpeedIndex2
description: "Example" """,
3,
],
@@ -629,12 +659,20 @@ metrics:
FirstPaint:
aliases:
- fcp
+ - SpeedIndex3
+ - SpeedIndex
description: Example
SpeedIndex:
aliases:
- speedindex
- si
description: Example
+ SpeedIndex3:
+ aliases:
+ - speedindex
+ - si
+ - fcp
+ description: Example
""",
5,
],
@@ -648,10 +686,7 @@ def test_perfdocs_verifier_duplicate_metrics(
setup_sample_logger(logger, structured_logger, top_dir)
with open(perfdocs_sample["config"], "w", newline="\n") as f:
- indented_defs = "\n".join(
- [(" " * 8) + metric_line for metric_line in metric_definitions.split("\n")]
- )
- f.write(SAMPLE_METRICS_CONFIG.format(metric_definitions, indented_defs))
+ f.write(DYNAMIC_METRICS_CONFIG.format(metric_definitions))
with open(perfdocs_sample["manifest"]["path"], "w", newline="\n") as f:
f.write(manifest)
@@ -710,7 +745,7 @@ def test_perfdocs_verifier_valid_metrics(
setup_sample_logger(logger, structured_logger, top_dir)
with open(perfdocs_sample["config"], "w", newline="\n") as f:
- f.write(SAMPLE_METRICS_CONFIG.format(metric_definitions, ""))
+ f.write(DYNAMIC_METRICS_CONFIG.format(metric_definitions, ""))
with open(perfdocs_sample["manifest"]["path"], "w", newline="\n") as f:
f.write(manifest)
@@ -836,7 +871,9 @@ def test_perfdocs_framework_gatherers_urls(logger, structured_logger, perfdocs_s
for test_name in tests.keys():
desc = gn._verifier._gatherer.framework_gatherers[
"raptor"
- ].build_test_description(fg, test_name, tests[test_name], suite_name)
+ ].build_test_description(
+ fg, test_name, tests[test_name], suite_name, {"fcp": {}}
+ )
assert f"**test url**: `<{url[0]['test_url']}>`__" in desc[0]
assert f"**expected**: {url[0]['expected']}" in desc[0]
assert test_name in desc[0]
diff --git a/tools/lint/test/test_perfdocs_generation.py b/tools/lint/test/test_perfdocs_generation.py
index b9b540d234..7966ed0f12 100644
--- a/tools/lint/test/test_perfdocs_generation.py
+++ b/tools/lint/test/test_perfdocs_generation.py
@@ -51,6 +51,72 @@ def test_perfdocs_generator_generate_perfdocs_pass(
@mock.patch("perfdocs.logger.PerfDocLogger")
+def test_perfdocs_generator_generate_perfdocs_metrics_pass(
+ logger, structured_logger, perfdocs_sample
+):
+ from test_perfdocs import temp_file
+
+ top_dir = perfdocs_sample["top_dir"]
+ setup_sample_logger(logger, structured_logger, top_dir)
+
+ templates_dir = pathlib.Path(top_dir, "tools", "lint", "perfdocs", "templates")
+ templates_dir.mkdir(parents=True, exist_ok=True)
+
+ from perfdocs.generator import Generator
+ from perfdocs.verifier import Verifier
+
+ sample_gatherer_result = {
+ "suite": {"Example": {"metrics": ["fcp", "SpeedIndex"]}},
+ "another_suite": {"Example": {}},
+ }
+ sample_test_list_result = {
+ "suite": [{"metrics": ["fcp", "SpeedIndex"], "name": "Example"}],
+ "another_suite": [{"name": "Example"}],
+ }
+
+ with temp_file(
+ "metrics.rst",
+ tempdir=pathlib.Path(top_dir, "perfdocs"),
+ content="{metrics_documentation}",
+ ):
+ with mock.patch(
+ "perfdocs.framework_gatherers.RaptorGatherer.get_test_list"
+ ) as m:
+ m.return_value = sample_gatherer_result
+ with perfdocs_sample["config"].open("w") as f1, perfdocs_sample[
+ "config_metrics"
+ ].open("r") as f2:
+ # Overwrite content of config.yml with metrics config
+ f1.write(f2.read())
+
+ verifier = Verifier(top_dir)
+ verifier.validate_tree()
+
+ verifier._gatherer.framework_gatherers[
+ "raptor"
+ ]._descriptions = sample_test_list_result
+
+ generator = Generator(verifier, generate=True, workspace=top_dir)
+ with temp_file(
+ "index.rst", tempdir=templates_dir, content="{test_documentation}"
+ ):
+ generator.generate_perfdocs()
+
+ with pathlib.Path(generator.perfdocs_path, "raptor-metrics.rst").open() as f:
+ metrics_content = f.read()
+ assert "{metrics_documentation}" not in metrics_content
+ assert "a description" in metrics_content
+ assert "**Tests using it**" in metrics_content
+
+ with pathlib.Path(generator.perfdocs_path, "raptor.rst").open() as f:
+ raptor_index_content = f.read()
+ assert "{metrics_rst_name}" not in raptor_index_content
+ assert "raptor-metrics" in raptor_index_content
+
+ assert logger.warning.call_count == 0
+
+
+@mock.patch("perfdocs.logger.PerfDocLogger")
def test_perfdocs_generator_needed_regeneration(
logger, structured_logger, perfdocs_sample
):
@@ -227,7 +293,7 @@ def test_perfdocs_generator_build_perfdocs(logger, structured_logger, perfdocs_s
generator = Generator(verifier, generate=True, workspace=top_dir)
frameworks_info = generator.build_perfdocs_from_tree()
- expected = ["dynamic", "static"]
+ expected = ["dynamic", "metrics", "static"]
for framework in sorted(frameworks_info.keys()):
for i, framework_info in enumerate(frameworks_info[framework]):
diff --git a/tools/lint/trojan-source.yml b/tools/lint/trojan-source.yml
index a273626b58..7a0ac594c3 100644
--- a/tools/lint/trojan-source.yml
+++ b/tools/lint/trojan-source.yml
@@ -16,10 +16,10 @@ trojan-source:
- third_party/rust/clap_builder/src/output/textwrap/core.rs
- third_party/rust/textwrap/src/core.rs
- third_party/rust/icu_provider/src/hello_world.rs
- - third_party/rust/uniffi-example-rondpoint/tests/bindings/test_rondpoint.py
- third_party/rust/error-chain/tests/tests.rs
- third_party/rust/unicode-width/src/tests.rs
- security/nss/gtests/mozpkix_gtest/pkixnames_tests.cpp
+ - toolkit/components/uniffi-fixtures/rondpoint/tests/bindings/test_rondpoint.py
extensions:
- .c
- .cc
diff --git a/tools/moz.build b/tools/moz.build
index bca499db61..041c998800 100644
--- a/tools/moz.build
+++ b/tools/moz.build
@@ -13,9 +13,6 @@ with Files("code-coverage/**"):
with Files("compare-locales/mach_commands.py"):
BUG_COMPONENT = ("Localization Infrastructure and Tools", "compare-locales")
-with Files("github-sync/**"):
- BUG_COMPONENT = ("Core", "Graphics")
-
with Files("lint/**"):
BUG_COMPONENT = ("Developer Infrastructure", "Lint and Formatting")
diff --git a/tools/moztreedocs/docs/jsdoc-support.rst b/tools/moztreedocs/docs/jsdoc-support.rst
index 100fb92dac..2c1d5843b6 100644
--- a/tools/moztreedocs/docs/jsdoc-support.rst
+++ b/tools/moztreedocs/docs/jsdoc-support.rst
@@ -1,6 +1,25 @@
jsdoc support
=============
+ESLint support
+--------------
+
+If you are looking to enable JSDoc generation for your documents, please also
+enable the ESLint plugin for JSDoc if it is not already enabled.
+
+In the top-level :searchfox:`.eslintrc.js file <.eslintrc.js>` there are currently
+two sections where the ``valid-jsdoc`` and ``require-jsdoc`` rules are enabled.
+Please check that your component is not excluded from these sections. If it is,
+you should remove the exclusion and fix any instances that are raised by running
+
+.. code-block:: shell
+
+ ./mach eslint path/to/component/
+
+
+Enabling JSDoc generation
+-------------------------
+
Here is a quick example, for the public AddonManager :ref:`API <AddonManager Reference>`
To use it for your own code:
@@ -8,9 +27,9 @@ To use it for your own code:
#. Check that JSDoc generates the output you expect (you may need to use a @class annotation on "object initializer"-style class definitions for instance)
#. Create an `.rst file`, which may contain explanatory text as well as the API docs. The minimum will look something like
- `this <https://firefox-source-docs.mozilla.org/_sources/toolkit/mozapps/extensions/addon-manager/AddonManager.rst.txt>`__
+ `this <https://firefox-source-docs.mozilla.org/_sources/toolkit/mozapps/extensions/addon-manager/AddonManager.rst.txt>`__.
#. Ensure your component is on the js_source_path here in the sphinx
- config: https://hg.mozilla.org/mozilla-central/file/72ee4800d415/tools/docs/conf.py#l46
+ config: https://hg.mozilla.org/mozilla-central/file/72ee4800d415/tools/docs/conf.py#l46
#. Run `mach doc` locally to generate the output and confirm that it looks correct.
diff --git a/tools/performance/Perfetto.cpp b/tools/performance/Perfetto.cpp
new file mode 100644
index 0000000000..1fef9c3b78
--- /dev/null
+++ b/tools/performance/Perfetto.cpp
@@ -0,0 +1,19 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/Perfetto.h"
+#include <stdlib.h>
+
+PERFETTO_TRACK_EVENT_STATIC_STORAGE();
+
+void InitPerfetto() {
+ if (!getenv("MOZ_DISABLE_PERFETTO")) {
+ perfetto::TracingInitArgs args;
+ args.backends |= perfetto::kSystemBackend;
+ perfetto::Tracing::Initialize(args);
+ perfetto::TrackEvent::Register();
+ }
+}
diff --git a/tools/performance/Perfetto.h b/tools/performance/Perfetto.h
new file mode 100644
index 0000000000..5a2989ce95
--- /dev/null
+++ b/tools/performance/Perfetto.h
@@ -0,0 +1,117 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_Perfetto_h
+#define mozilla_Perfetto_h
+
+#ifdef MOZ_PERFETTO
+# include "perfetto/perfetto.h"
+# include "mozilla/TimeStamp.h"
+
+// Initialization is called when a content process is created.
+// This can be called multiple times.
+extern void InitPerfetto();
+
+/* Perfetto Tracing:
+ *
+ * This file provides an interface to the perfetto tracing API. The API from
+ * the perfetto sdk can be used directly, but an additional set of macros
+ * prefixed with PERFETTO_* have been defined to help minimize the use of
+ * ifdef's.
+ *
+ * The common perfetto macros require a category and name at the very least.
+ * These must be static strings, or wrapped with perfetto::DynamicString if
+ * dynamic. If the string is static, but provided through a runtime pointer,
+ * then it must be wrapped with perfetto::StaticString.
+ *
+ * You can also provide additional parameters such as a timestamp,
+ * or a lambda to add additional information to the trace marker.
+ * For more info, see https://perfetto.dev/docs/instrumentation/tracing-sdk
+ *
+ * Examples:
+ *
+ * // Add a trace event to measure work inside a block,
+ * // using static strings only.
+ *
+ * {
+ * PERFETTO_TRACE_EVENT("js", "JS::RunScript");
+ * run_script();
+ * }
+ *
+ * // Add a trace event to measure work inside a block,
+ * // using a dynamic string.
+ *
+ * void runScript(nsCString& scriptName)
+ * {
+ * PERFETTO_TRACE_EVENT("js", perfetto::DynamicString{scriptName.get()});
+ * run_script();
+ * }
+ *
+ * // Add a trace event using a dynamic category and name.
+ *
+ * void runScript(nsCString& categoryName, nsCString& scriptName)
+ * {
+ * perfetto::DynamicCategory category{category.get()};
+ * PERFETTO_TRACE_EVENT(category, perfetto::DynamicString{scriptName.get()});
+ * run_script();
+ * }
+ *
+ * // Add a trace event to measure two arbitrary points of code.
+ * // Events in the same category must always be nested.
+ *
+ * void startWork() {
+ * PERFETTO_TRACE_EVENT_BEGIN("js", "StartWork");
+ * ...
+ * PERFETTO_TRACE_EVENT_END("js");
+ * }
+ *
+ * // Create a trace marker for an event that has already occurred
+ * // using previously saved timestamps.
+ *
+ * void record_event(TimeStamp startTimeStamp, TimeStamp endTimeStamp)
+ * {
+ * PERFETTO_TRACE_EVENT_BEGIN("js", "Some Event", startTimeStamp);
+ * PERFETTO_TRACE_EVENT_END("js", endTimeStamp);
+ * }
+ */
+
+// Wrap the common trace event macros from perfetto so
+// they can be called without #ifdef's.
+# define PERFETTO_TRACE_EVENT(...) TRACE_EVENT(__VA_ARGS__)
+# define PERFETTO_TRACE_EVENT_BEGIN(...) TRACE_EVENT_BEGIN(__VA_ARGS__)
+# define PERFETTO_TRACE_EVENT_END(...) TRACE_EVENT_END(__VA_ARGS__)
+
+namespace perfetto {
+// Specialize custom timestamps for mozilla::TimeStamp.
+template <>
+struct TraceTimestampTraits<mozilla::TimeStamp> {
+ static inline TraceTimestamp ConvertTimestampToTraceTimeNs(
+ const mozilla::TimeStamp& timestamp) {
+ return {protos::gen::BuiltinClock::BUILTIN_CLOCK_MONOTONIC,
+ timestamp.RawClockMonotonicNanosecondsSinceBoot()};
+ }
+};
+} // namespace perfetto
+
+// Categories can be added dynamically, but to minimize overhead
+// all categories should be pre-defined here whenever possible.
+PERFETTO_DEFINE_CATEGORIES(perfetto::Category("task"),
+ perfetto::Category("usertiming"));
+
+#else // !defined(MOZ_PERFETTO)
+# define PERFETTO_TRACE_EVENT(...) \
+ do { \
+ } while (0)
+# define PERFETTO_TRACE_EVENT_BEGIN(...) \
+ do { \
+ } while (0)
+# define PERFETTO_TRACE_EVENT_END(...) \
+ do { \
+ } while (0)
+inline void InitPerfetto() {}
+#endif // MOZ_PERFETTO
+
+#endif // mozilla_Perfetto_h
diff --git a/tools/performance/moz.build b/tools/performance/moz.build
index ea82c83126..10f2b69cf2 100644
--- a/tools/performance/moz.build
+++ b/tools/performance/moz.build
@@ -9,9 +9,14 @@ UNIFIED_SOURCES += [
]
EXPORTS.mozilla += [
+ "Perfetto.h",
"PerfStats.h",
]
include("/ipc/chromium/chromium-config.mozbuild")
+if CONFIG["MOZ_PERFETTO"]:
+ UNIFIED_SOURCES += ["Perfetto.cpp"]
+ DIRS += ["/third_party/perfetto/"]
+
FINAL_LIBRARY = "xul"
diff --git a/tools/profiler/core/memory_hooks.cpp b/tools/profiler/core/memory_hooks.cpp
index e13a109aab..5167d15d46 100644
--- a/tools/profiler/core/memory_hooks.cpp
+++ b/tools/profiler/core/memory_hooks.cpp
@@ -584,6 +584,7 @@ BaseProfilerCount* install_memory_hooks() {
ThreadIntercept::Init();
} else {
sCounter->Clear();
+ sCounter->Register();
}
jemalloc_replace_dynamic(replace_init);
return sCounter;
@@ -635,4 +636,10 @@ void disable_native_allocations() {
}
}
+void unregister_memory_counter() {
+ if (sCounter) {
+ sCounter->Unregister();
+ }
+}
+
} // namespace mozilla::profiler
diff --git a/tools/profiler/core/memory_hooks.h b/tools/profiler/core/memory_hooks.h
index a6ace771dd..4f59b21136 100644
--- a/tools/profiler/core/memory_hooks.h
+++ b/tools/profiler/core/memory_hooks.h
@@ -17,6 +17,7 @@ BaseProfilerCount* install_memory_hooks();
void remove_memory_hooks();
void enable_native_allocations();
void disable_native_allocations();
+void unregister_memory_counter();
} // namespace profiler
} // namespace mozilla
diff --git a/tools/profiler/core/platform.cpp b/tools/profiler/core/platform.cpp
index 6b7e318f80..4641587a9a 100644
--- a/tools/profiler/core/platform.cpp
+++ b/tools/profiler/core/platform.cpp
@@ -114,18 +114,32 @@
#include <string_view>
#include <type_traits>
+// To simplify other code in this file, define a helper definition to avoid
+// repeating the same preprocessor checks.
+
// The signals that we use to control the profiler conflict with the signals
-// used to control the code coverage tool. Therefore, if coverage is enabled, we
-// need to disable our own signal handling mechanisms.
+// used to control the code coverage tool. Therefore, if coverage is enabled,
+// we need to disable our own signal handling mechanisms.
#ifndef MOZ_CODE_COVERAGE
# ifdef XP_WIN
// TODO: Add support for windows "signal"-like behaviour. See Bug 1867328.
+# elif defined(GP_OS_darwin) || defined(GP_OS_linux) || \
+ defined(GP_OS_android) || defined(GP_OS_freebsd)
+// Specify the specific platforms that we want to support
+# define GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL 1
# else
-# include <signal.h>
-# include <unistd.h>
+// No support on this unknown platform!
# endif
#endif
+// We need some extra includes if we're supporting async posix signals
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+# include <signal.h>
+# include <fcntl.h>
+# include <unistd.h>
+# include <errno.h>
+#endif
+
#if defined(GP_OS_android)
# include "JavaExceptions.h"
# include "mozilla/java/GeckoJavaSamplerNatives.h"
@@ -250,11 +264,28 @@ ProfileChunkedBuffer& profiler_get_core_buffer() {
return sProfileChunkedBuffer;
}
-mozilla::Atomic<int, mozilla::MemoryOrdering::Relaxed> gSkipSampling;
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+// Control character to start the profiler ('g' for "go"!)
+static const char sAsyncSignalControlCharStart = 'g';
+// Control character to stop the profiler ('s' for "stop"!)
+static const char sAsyncSignalControlCharStop = 's';
+
+// This is a file descriptor that is the "write" end of the POSIX pipe that we
+// use to start the profiler. It is written to in profiler_start_signal_handler
+// and read from in AsyncSignalControlThread
+static mozilla::Atomic<int, mozilla::MemoryOrdering::Relaxed>
+ sAsyncSignalControlWriteFd(-1);
// Atomic flag to stop the profiler from within the sampling loop
mozilla::Atomic<bool, mozilla::MemoryOrdering::Relaxed> gStopAndDumpFromSignal(
false);
+#endif
+
+// Forward declare the function to call when we need to dump + stop from within
+// the async control thread
+void profiler_dump_and_stop();
+
+mozilla::Atomic<int, mozilla::MemoryOrdering::Relaxed> gSkipSampling;
#if defined(GP_OS_android)
class GeckoJavaSampler
@@ -380,6 +411,7 @@ static uint32_t AvailableFeatures() {
}
#else
// The memory hooks are not available.
+ ProfilerFeature::ClearMemory(features);
ProfilerFeature::ClearNativeAllocations(features);
#endif
@@ -506,6 +538,143 @@ static constexpr size_t MAX_JS_FRAMES =
using JsFrame = mozilla::profiler::ThreadRegistrationData::JsFrame;
using JsFrameBuffer = mozilla::profiler::ThreadRegistrationData::JsFrameBuffer;
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+// Forward declare this, so we can call it from the constructor.
+static void* AsyncSignalControlThreadEntry(void* aArg);
+
+// Define our platform specific async (posix) signal control thread here.
+class AsyncSignalControlThread {
+ public:
+ AsyncSignalControlThread() : mThread() {
+ // Try to open a pipe for this to communicate with. If we can't do this,
+ // then we give up and return, as there's no point continuing without
+ // being able to communicate
+ int pipeFds[2];
+ if (pipe(pipeFds)) {
+ LOG("Profiler AsyncSignalControlThread failed to create a pipe.");
+ return;
+ }
+
+ // Close this pipe on calls to exec().
+ fcntl(pipeFds[0], F_SETFD, FD_CLOEXEC);
+ fcntl(pipeFds[1], F_SETFD, FD_CLOEXEC);
+
+ // Write the reading side to mFd, and the writing side to the global atomic
+ mFd = pipeFds[0];
+ sAsyncSignalControlWriteFd = pipeFds[1];
+
+ // We don't really care about stack size, as it should be minimal, so
+ // leave the pthread attributes as a nullptr, i.e. choose the default.
+ pthread_attr_t* attr_ptr = nullptr;
+ if (pthread_create(&mThread, attr_ptr, AsyncSignalControlThreadEntry,
+ this) != 0) {
+ MOZ_CRASH("pthread_create failed");
+ }
+ };
+
+ ~AsyncSignalControlThread() {
+ // Derived from code in nsDumpUtils.cpp. Comment reproduced here for
+ // poisterity: Close sAsyncSignalControlWriteFd /after/ setting the fd to
+ // -1. Otherwise we have the (admittedly far-fetched) race where we
+ //
+ // 1) close sAsyncSignalControlWriteFd
+ // 2) open a new fd with the same number as sAsyncSignalControlWriteFd
+ // had.
+ // 3) receive a signal, then write to the fd.
+ int asyncSignalControlWriteFd = sAsyncSignalControlWriteFd.exchange(-1);
+ // This will unblock the "read" in StartWatching.
+ close(asyncSignalControlWriteFd);
+ // Finally, exit the thread.
+ pthread_join(mThread, nullptr);
+ };
+
+ void Watch() {
+ char msg[1];
+ ssize_t nread;
+ while (true) {
+ // Try reading from the pipe. This will block until something is written:
+ nread = read(mFd, msg, sizeof(msg));
+
+ if (nread == -1 && errno == EINTR) {
+ // nread == -1 and errno == EINTR means that `read` was interrupted
+ // by a signal before reading any data. This is likely because the
+ // profiling thread interrupted us (with SIGPROF). We can safely ignore
+ // this and "go around" the loop again to try and read.
+ continue;
+ }
+
+ if (nread == -1 && errno != EINTR) {
+ // nread == -1 and errno != EINTR means that `read` has failed in some
+ // way that we can't recover from. In this case, all we can do is give
+ // up, and quit the watcher, as the pipe is likely broken.
+ LOG("Error (%d) when reading in AsyncSignalControlThread", errno);
+ return;
+ }
+
+ if (nread == 0) {
+ // nread == 0 signals that the other end of the pipe has been cleanly
+ // closed. Close our end, and exit the reading loop.
+ close(mFd);
+ return;
+ }
+
+ // If we reach here, nread != 0 and nread != -1. This means that we
+ // should have read at least one byte, which should be a control byte
+ // for the profiler.
+ // It *might* happen that `read` is interrupted by the sampler thread
+ // after successfully reading. If this occurs, read returns the number
+ // of bytes read. As anything other than 1 is wrong for us, we can
+ // always assume that we can read whatever `read` read.
+ MOZ_RELEASE_ASSERT(nread == 1);
+
+ if (msg[0] == sAsyncSignalControlCharStart) {
+ // Start the profiler here directly, as we're on a background thread.
+ // set of preferences, configuration of them is TODO, see Bug 1866007
+ uint32_t features = ProfilerFeature::JS | ProfilerFeature::StackWalk |
+ ProfilerFeature::CPUUtilization;
+ // as we often don't know what threads we'll care about, tell the
+ // profiler to profile all threads.
+ const char* filters[] = {"*"};
+ profiler_start(PROFILER_DEFAULT_SIGHANDLE_ENTRIES,
+ PROFILER_DEFAULT_INTERVAL, features, filters,
+ MOZ_ARRAY_LENGTH(filters), 0);
+ } else if (msg[0] == sAsyncSignalControlCharStop) {
+ // Check to see whether the profiler is even running before trying to
+ // stop the profiler. Most other methods of stopping the profiler (i.e.
+ // those through nsProfiler etc) already know whether or not the
+ // profiler is running, so don't try and stop it if it's already
+ // running. Signal-stopping doesn't have this constraint, so we should
+ // check just in case there is a codepath followed by
+ // `profiler_dump_and_stop` that breaks if we stop while stopped.
+ if (profiler_is_active()) {
+ profiler_dump_and_stop();
+ }
+ } else {
+ LOG("AsyncSignalControlThread recieved unknown control signal: %c",
+ msg[0]);
+ }
+ }
+ };
+
+ private:
+ // The read side of the pipe that we use to communicate from a signal handler
+ // to the AsyncSignalControlThread
+ int mFd;
+
+ // The thread handle for the async signal control thread
+ // Note, that unlike the sampler thread, this is currently a posix-only
+ // feature. Therefore, we don't bother to have a windows equivalent - we
+ // just use a pthread_t
+ pthread_t mThread;
+};
+
+static void* AsyncSignalControlThreadEntry(void* aArg) {
+ auto* thread = static_cast<AsyncSignalControlThread*>(aArg);
+ thread->Watch();
+ return nullptr;
+}
+#endif
+
// All functions in this file can run on multiple threads unless they have an
// NS_IsMainThread() assertion.
@@ -529,6 +698,10 @@ class CorePS {
CorePS()
: mProcessStartTime(TimeStamp::ProcessCreation()),
mMaybeBandwidthCounter(nullptr)
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+ ,
+ mAsyncSignalControlThread(nullptr)
+#endif
#ifdef USE_LUL_STACKWALK
,
mLul(nullptr)
@@ -539,6 +712,9 @@ class CorePS {
}
~CorePS() {
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+ delete mAsyncSignalControlThread;
+#endif
#ifdef USE_LUL_STACKWALK
delete sInstance->mLul;
delete mMaybeBandwidthCounter;
@@ -684,6 +860,14 @@ class CorePS {
return sInstance->mMaybeBandwidthCounter;
}
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+ static void SetAsyncSignalControlThread(
+ AsyncSignalControlThread* aAsyncSignalControlThread) {
+ MOZ_ASSERT(sInstance);
+ sInstance->mAsyncSignalControlThread = aAsyncSignalControlThread;
+ }
+#endif
+
private:
// The singleton instance
static CorePS* sInstance;
@@ -701,6 +885,11 @@ class CorePS {
// Non-owning pointers to all active counters
Vector<BaseProfilerCount*> mCounters;
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+ // Background thread for communicating with async signal handlers
+ AsyncSignalControlThread* mAsyncSignalControlThread;
+#endif
+
#ifdef USE_LUL_STACKWALK
// LUL's state. Null prior to the first activation, non-null thereafter.
// Owned by this CorePS.
@@ -1139,6 +1328,11 @@ class ActivePS {
#undef PS_GET_FEATURE
+ static bool ShouldInstallMemoryHooks(PSLockRef) {
+ MOZ_ASSERT(sInstance);
+ return ProfilerFeature::ShouldInstallMemoryHooks(sInstance->mFeatures);
+ }
+
static uint32_t JSFlags(PSLockRef aLock) {
uint32_t Flags = 0;
Flags |=
@@ -4106,10 +4300,6 @@ static SamplerThread* NewSamplerThread(PSLockRef aLock, uint32_t aGeneration,
return new SamplerThread(aLock, aGeneration, aInterval, aFeatures);
}
-// Forward declare the function to call when we need to dump + stop from within
-// the sampler thread
-void profiler_dump_and_stop();
-
// This function is the sampler thread. This implementation is used for all
// targets.
void SamplerThread::Run() {
@@ -4765,27 +4955,6 @@ void SamplerThread::Run() {
scheduledSampleStart = beforeSleep + sampleInterval;
SleepMicro(static_cast<uint32_t>(sampleInterval.ToMicroseconds()));
}
-
- // Check to see if the hard-reset flag has been set to stop the profiler.
- // This should only be used on the worst occasions when we need to stop the
- // profiler from within the sampling thread (e.g. if the main thread is
- // stuck) We need to do this here as it is outside of the scope of the lock.
- // Otherwise we'll encounter a race condition where `profiler_stop` tries to
- // get the lock that we already hold. We also need to wait until after we
- // have carried out post sampling callbacks, as otherwise we may reach a
- // situation where another part of the program is waiting for us to finish
- // sampling, but we have ended early!
- if (gStopAndDumpFromSignal) {
- // Reset the flag in case we restart the profiler at a later point
- gStopAndDumpFromSignal = false;
- // dump the profile, and stop the profiler
- profiler_dump_and_stop();
- // profiler_stop will try to destroy the active sampling thread. This will
- // also destroy some data structures that are used further down this
- // function, leading to invalid accesses. We therefore exit the function
- // directly, rather than breaking from the loop.
- return;
- }
}
// End of `while` loop. We can only be here from a `break` inside the loop.
@@ -5069,9 +5238,9 @@ void SamplerThread::SpyOnUnregisteredThreads() {
MOZ_DEFINE_MALLOC_SIZE_OF(GeckoProfilerMallocSizeOf)
-NS_IMETHODIMP
-GeckoProfilerReporter::CollectReports(nsIHandleReportCallback* aHandleReport,
- nsISupports* aData, bool aAnonymize) {
+NS_IMETHODIMP GeckoProfilerReporter::CollectReports(
+ nsIHandleReportCallback* aHandleReport, nsISupports* aData,
+ bool aAnonymize) {
MOZ_RELEASE_ASSERT(NS_IsMainThread());
size_t profSize = 0;
@@ -5294,16 +5463,41 @@ static const char* get_size_suffix(const char* str) {
return ptr;
}
-#if !defined(XP_WIN) && !defined(MOZ_CODE_COVERAGE)
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+static void profiler_start_signal_handler(int signal, siginfo_t* info,
+ void* context) {
+ // Starting the profiler from a signal handler is a risky business: Both of
+ // the main tasks that we would like to accomplish (allocating memory, and
+ // starting a thread) are illegal within a UNIX signal handler. Conversely,
+ // we cannot dispatch to the main thread, as this may be "stuck" (why else
+ // would we be using a signal handler to start the profiler?).
+ // Instead, we have a background thread running that watches a pipe for a
+ // given "control" character. In this handler, we can simply write to that
+ // pipe to get the background thread to start the profiler for us!
+ // Note that `write` is async-signal safe (see signal-safety(7)):
+ // https://www.man7.org/linux/man-pages/man7/signal-safety.7.html
+ // This means that it's safe for us to call within a signal handler.
+ if (sAsyncSignalControlWriteFd != -1) {
+ char signalControlCharacter = sAsyncSignalControlCharStart;
+ Unused << write(sAsyncSignalControlWriteFd, &signalControlCharacter,
+ sizeof(signalControlCharacter));
+ }
+}
+
static void profiler_stop_signal_handler(int signal, siginfo_t* info,
void* context) {
- // We cannot really do any logging here, as this is a signal handler.
// Signal handlers are limited in what functions they can call, for more
// details see: https://man7.org/linux/man-pages/man7/signal-safety.7.html
- // Writing to a file is allowed, but as signal handlers are also limited in
- // how long they can run, we instead set an atomic variable to true to trigger
- // the sampling thread to stop and dump the data in the profiler.
- gStopAndDumpFromSignal = true;
+ // As we have a background thread already running for checking whether or
+ // not we want to start the profiler, we can re-use the same machinery to
+ // stop the profiler. We use the same mechanism of writing to a pipe/file
+ // descriptor, but with a different control character. Note that `write` is
+ // signal safe.
+ if (sAsyncSignalControlWriteFd != -1) {
+ char signalControlCharacter = sAsyncSignalControlCharStop;
+ Unused << write(sAsyncSignalControlWriteFd, &signalControlCharacter,
+ sizeof(signalControlCharacter));
+ }
}
#endif
@@ -5379,8 +5573,17 @@ void profiler_dump_and_stop() {
profiler_stop();
}
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
void profiler_init_signal_handlers() {
-#if !defined(XP_WIN) && !defined(MOZ_CODE_COVERAGE)
+ // Set a handler to start the profiler
+ struct sigaction prof_start_sa {};
+ memset(&prof_start_sa, 0, sizeof(struct sigaction));
+ prof_start_sa.sa_sigaction = profiler_start_signal_handler;
+ prof_start_sa.sa_flags = SA_RESTART | SA_SIGINFO;
+ sigemptyset(&prof_start_sa.sa_mask);
+ DebugOnly<int> rstart = sigaction(SIGUSR1, &prof_start_sa, nullptr);
+ MOZ_ASSERT(rstart == 0, "Failed to install Profiler SIGUSR1 handler");
+
// Set a handler to stop the profiler
struct sigaction prof_stop_sa {};
memset(&prof_stop_sa, 0, sizeof(struct sigaction));
@@ -5389,8 +5592,8 @@ void profiler_init_signal_handlers() {
sigemptyset(&prof_stop_sa.sa_mask);
DebugOnly<int> rstop = sigaction(SIGUSR2, &prof_stop_sa, nullptr);
MOZ_ASSERT(rstop == 0, "Failed to install Profiler SIGUSR2 handler");
-#endif
}
+#endif
void profiler_init(void* aStackTop) {
LOG("profiler_init");
@@ -5444,8 +5647,14 @@ void profiler_init(void* aStackTop) {
// Platform-specific initialization.
PlatformInit(lock);
+#if defined(GECKO_PROFILER_ASYNC_POSIX_SIGNAL_CONTROL)
+ // Initialise the background thread to listen for signal handler
+ // communication
+ CorePS::SetAsyncSignalControlThread(new AsyncSignalControlThread);
+
// Initialise the signal handlers needed to start/stop the profiler
profiler_init_signal_handlers();
+#endif
#if defined(GP_OS_android)
if (jni::IsAvailable()) {
@@ -5611,9 +5820,16 @@ void profiler_init(void* aStackTop) {
profiler_mark_thread_awake();
#if defined(MOZ_REPLACE_MALLOC) && defined(MOZ_PROFILER_MEMORY)
- // Start counting memory allocations (outside of lock because this may call
- // profiler_add_sampled_counter which would attempt to take the lock.)
- ActivePS::SetMemoryCounter(mozilla::profiler::install_memory_hooks());
+ if (ProfilerFeature::ShouldInstallMemoryHooks(features)) {
+ // Start counting memory allocations (outside of lock because this may call
+ // profiler_add_sampled_counter which would attempt to take the lock.)
+ ActivePS::SetMemoryCounter(mozilla::profiler::install_memory_hooks());
+ } else {
+ // Unregister the memory counter in case it was registered before. This will
+ // make sure that the empty memory counter from the previous profiler run is
+ // removed completely and we don't serialize the memory counters.
+ mozilla::profiler::unregister_memory_counter();
+ }
#endif
invoke_profiler_state_change_callbacks(ProfilingState::Started);
@@ -6240,9 +6456,16 @@ RefPtr<GenericPromise> profiler_start(PowerOfTwo32 aCapacity, double aInterval,
}
#if defined(MOZ_REPLACE_MALLOC) && defined(MOZ_PROFILER_MEMORY)
- // Start counting memory allocations (outside of lock because this may call
- // profiler_add_sampled_counter which would attempt to take the lock.)
- ActivePS::SetMemoryCounter(mozilla::profiler::install_memory_hooks());
+ if (ProfilerFeature::ShouldInstallMemoryHooks(aFeatures)) {
+ // Start counting memory allocations (outside of lock because this may call
+ // profiler_add_sampled_counter which would attempt to take the lock.)
+ ActivePS::SetMemoryCounter(mozilla::profiler::install_memory_hooks());
+ } else {
+ // Unregister the memory counter in case it was registered before. This will
+ // make sure that the empty memory counter from the previous profiler run is
+ // removed completely and we don't serialize the memory counters.
+ mozilla::profiler::unregister_memory_counter();
+ }
#endif
invoke_profiler_state_change_callbacks(ProfilingState::Started);
@@ -6366,7 +6589,8 @@ void profiler_ensure_started(PowerOfTwo32 aCapacity, double aInterval,
}
#if defined(MOZ_REPLACE_MALLOC) && defined(MOZ_PROFILER_MEMORY)
- if (ActivePS::FeatureNativeAllocations(aLock)) {
+ if (ActivePS::FeatureNativeAllocations(aLock) &&
+ ActivePS::ShouldInstallMemoryHooks(aLock)) {
mozilla::profiler::disable_native_allocations();
}
#endif
diff --git a/tools/profiler/docs/code-overview.rst b/tools/profiler/docs/code-overview.rst
index 3ca662e141..bb9db364de 100644
--- a/tools/profiler/docs/code-overview.rst
+++ b/tools/profiler/docs/code-overview.rst
@@ -2,7 +2,7 @@ Profiler Code Overview
######################
This is an overview of the code that implements the Profiler inside Firefox
-with dome details around tricky subjects, or pointers to more detailed
+with some details around tricky subjects, or pointers to more detailed
documentation and/or source code.
It assumes familiarity with Firefox development, including Mercurial (hg), mach,
diff --git a/tools/profiler/docs/index.rst b/tools/profiler/docs/index.rst
index 53920e7d2f..02eb9f6839 100644
--- a/tools/profiler/docs/index.rst
+++ b/tools/profiler/docs/index.rst
@@ -23,13 +23,13 @@ while the profiler.firefox.com interface is documented at `profiler.firefox.com/
buffer
instrumenting-javascript
instrumenting-rust
+ instrumenting-android
markers-guide
memory
The following areas still need documentation:
* LUL
- * Instrumenting Java
* Registering Threads
* Samples and Stack Walking
* Triggering Gecko Profiles in Automation
diff --git a/tools/profiler/docs/instrumenting-android.rst b/tools/profiler/docs/instrumenting-android.rst
new file mode 100644
index 0000000000..fdd96613b4
--- /dev/null
+++ b/tools/profiler/docs/instrumenting-android.rst
@@ -0,0 +1,102 @@
+Instrumenting Android
+========================
+
+There are multiple ways to use the profiler with Android. There is the "Java"
+profiler feature (via about:profiling), which enables profiling for JVM code.
+This is most likely turned on already for the preset if you are profiling an
+Android device.
+
+In addition to sampling, markers can be created to specifically mark an instant
+in time, or a duration. This can be helpful to make sense of a particular piece
+of the front-end, or record events that normally wouldn't show up in samples.
+
+.. note::
+ This guide explains Android markers in depth. To learn more about how to add a
+ marker in C++, JavaScript or Rust, please take a look at their documentation
+ in :doc:`markers-guide`, :doc:`instrumenting-javascript` or
+ :doc:`instrumenting-rust` respectively.
+
+Markers in the GeckoView Java codebase
+**************************************
+
+If you are in the GeckoView codebase, then you should have access to ``GeckoRuntime``.
+``GeckoRuntime`` has a ``getProfilerController`` method to get the ``ProfilerController``.
+See the `ProfilerController Java file`_ (`javadoc`_) to find which methods you can use to
+instrument your source code.
+
+Here's an example:
+
+.. code-block:: java
+
+ // Simple marker
+ sGeckoRuntime.getProfilerController().addMarker("Marker Name");
+
+ // Simple marker with additional information
+ sGeckoRuntime.getProfilerController().addMarker("Marker Name", "info");
+
+ // Duration marker
+ Double startTime = sGeckoRuntime.getProfilerController().getProfilerTime();
+ // ...some code you want to measure...
+ sGeckoRuntime.getProfilerController().addMarker("Marker Name", startTime);
+
+ // Duration marker with additional information
+ sGeckoRuntime.getProfilerController().addMarker("Marker Name", startTime, "info");
+
+There are various overloads of ``addMarker`` you can choose depending on your need.
+
+If you need to compute some information before adding it to a marker, it's
+recommended to wrap that code with a `isProfilerActive` if check to make sure
+that it's only executed while the profiler is active. Here's an example:
+
+.. code-block:: java
+
+ ProfilerController profilerController = runtime.getProfilerController();
+ if (profilerController.isProfilerActive()) {
+ // Compute the information you want to include.
+ String info = ...
+ sGeckoRuntime.getProfilerController().addMarker("Marker Name", info);
+ }
+
+Markers in the Fenix codebase
+*****************************
+
+If you are in the Fenix codebase, then you should have access to the Android
+components. The Android components includes a `Profiler interface here`_, with
+its corresponding `implementation here`_. You should be able to do everything
+you can do with the ``ProfilerController``. Here's an example on how to call them:
+
+.. code-block:: kotlin
+
+ // Simple marker
+ components.core.engine.profiler?.addMarker("Marker Name");
+
+ // Simple marker with additional information
+ components.core.engine.profiler?.addMarker("Marker Name", "info");
+
+ // Duration marker
+ val startTime = components.core.engine.profiler?.getProfilerTime()
+ // ...some code you want to measure...
+ components.core.engine.profiler?.addMarker("Marker Name", startTime, "additional info")
+
+ // Duration marker with additional information
+ components.core.engine.profiler?.addMarker("Marker Name", startTime, "info");
+
+Similarly, there are various overloads of ``addMarker`` you can choose depending on your needs.
+
+Like for the GeckoView example above, if you need to compute some information
+before adding it to a marker, it's recommended to wrap that code with a
+`isProfilerActive` if check to make sure that it's only executed while the
+profiler is active. Here's an example:
+
+.. code-block:: kotlin
+
+ if (components.core.engine.profiler?.isProfilerActive() == true) {
+ // Compute the information you want to include.
+ var info = ...
+ components.core.engine.profiler?.addMarker("Marker Name", info)
+ }
+
+.. _ProfilerController Java file: https://searchfox.org/mozilla-central/source/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/ProfilerController.java
+.. _javadoc: https://mozilla.github.io/geckoview/javadoc/mozilla-central/org/mozilla/geckoview/ProfilerController.html
+.. _Profiler interface here: https://searchfox.org/mozilla-central/source/mobile/android/android-components/components/concept/base/src/main/java/mozilla/components/concept/base/profiler/Profiler.kt
+.. _implementation here: https://searchfox.org/mozilla-central/source/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/profiler/Profiler.kt
diff --git a/tools/profiler/docs/instrumenting-javascript.rst b/tools/profiler/docs/instrumenting-javascript.rst
index 928d94781e..4ad5118256 100644
--- a/tools/profiler/docs/instrumenting-javascript.rst
+++ b/tools/profiler/docs/instrumenting-javascript.rst
@@ -11,8 +11,9 @@ or record events that normally wouldn't show up in samples.
.. note::
This guide explains JavaScript markers in depth. To learn more about how to add a
- marker in C++ or Rust, please take a look at their documentation
- in :doc:`markers-guide` or :doc:`instrumenting-rust` respectively.
+ marker in C++, Rust or JVM please take a look at their documentation
+ in :doc:`markers-guide`, :doc:`instrumenting-rust` or :doc:`instrumenting-android`
+ respectively.
Markers in Browser Chrome
*************************
diff --git a/tools/profiler/docs/instrumenting-rust.rst b/tools/profiler/docs/instrumenting-rust.rst
index c3e12f42dc..603c008b6c 100644
--- a/tools/profiler/docs/instrumenting-rust.rst
+++ b/tools/profiler/docs/instrumenting-rust.rst
@@ -124,8 +124,9 @@ and an optional payload of a specific type (containing arbitrary data relevant t
.. note::
This guide explains Rust markers in depth. To learn more about how to add a
- marker in C++ or JavaScript, please take a look at their documentation
- in :doc:`markers-guide` or :doc:`instrumenting-javascript` respectively.
+ marker in C++, JavaScript or JVM, please take a look at their documentation
+ in :doc:`markers-guide` or :doc:`instrumenting-javascript`,
+ :doc:`instrumenting-android` respectively.
Examples
^^^^^^^^
diff --git a/tools/profiler/docs/markers-guide.rst b/tools/profiler/docs/markers-guide.rst
index ed18b35867..ac0e4430b9 100644
--- a/tools/profiler/docs/markers-guide.rst
+++ b/tools/profiler/docs/markers-guide.rst
@@ -9,8 +9,9 @@ and an optional payload of a specific type (containing arbitrary data relevant t
.. note::
This guide explains C++ markers in depth. To learn more about how to add a
- marker in JavaScript or Rust, please take a look at their documentation
- in :doc:`instrumenting-javascript` or :doc:`instrumenting-rust` respectively.
+ marker in JavaScript, Rust or JVM, please take a look at their documentation
+ in :doc:`instrumenting-javascript`, :doc:`instrumenting-rust` or
+ :doc:`instrumenting-android` respectively.
Example
-------
diff --git a/tools/profiler/public/ProfilerControl.h b/tools/profiler/public/ProfilerControl.h
index ac145fac00..53fec681ce 100644
--- a/tools/profiler/public/ProfilerControl.h
+++ b/tools/profiler/public/ProfilerControl.h
@@ -61,6 +61,9 @@ static constexpr mozilla::PowerOfTwo32 PROFILER_DEFAULT_ENTRIES =
static constexpr mozilla::PowerOfTwo32 PROFILER_DEFAULT_STARTUP_ENTRIES =
mozilla::baseprofiler::BASE_PROFILER_DEFAULT_STARTUP_ENTRIES;
+static constexpr mozilla::PowerOfTwo32 PROFILER_DEFAULT_SIGHANDLE_ENTRIES =
+ mozilla::MakePowerOfTwo32<64 * 1024 * 1024>(); // 64M entries = 512MiB
+
# define PROFILER_DEFAULT_INTERVAL BASE_PROFILER_DEFAULT_INTERVAL
# define PROFILER_MAX_INTERVAL BASE_PROFILER_MAX_INTERVAL
diff --git a/tools/profiler/public/ProfilerCounts.h b/tools/profiler/public/ProfilerCounts.h
index cebca81e2c..bdd2ddef9a 100644
--- a/tools/profiler/public/ProfilerCounts.h
+++ b/tools/profiler/public/ProfilerCounts.h
@@ -20,6 +20,7 @@
# include "mozilla/Assertions.h"
# include "mozilla/Atomics.h"
+# include "mozilla/DataMutex.h"
class BaseProfilerCount;
void profiler_add_sampled_counter(BaseProfilerCount* aCounter);
@@ -188,13 +189,33 @@ class ProfilerCounterTotal final : public BaseProfilerCount {
public:
ProfilerCounterTotal(const char* aLabel, const char* aCategory,
const char* aDescription)
- : BaseProfilerCount(aLabel, &mCounter, &mNumber, aCategory,
- aDescription) {
+ : BaseProfilerCount(aLabel, &mCounter, &mNumber, aCategory, aDescription),
+ mRegistered(false, "ProfilerCounterTotal::mRegistered") {
// Assume we're in libxul
+ Register();
+ }
+
+ virtual ~ProfilerCounterTotal() { Unregister(); }
+
+ void Register() {
+ auto registered = mRegistered.Lock();
+ if (*registered) {
+ return;
+ }
+
+ *registered = true;
profiler_add_sampled_counter(this);
}
- virtual ~ProfilerCounterTotal() { profiler_remove_sampled_counter(this); }
+ void Unregister() {
+ auto registered = mRegistered.Lock();
+ if (!*registered) {
+ return;
+ }
+
+ *registered = false;
+ profiler_remove_sampled_counter(this);
+ }
BaseProfilerCount& operator++() {
Add(1);
@@ -208,6 +229,9 @@ class ProfilerCounterTotal final : public BaseProfilerCount {
ProfilerAtomicSigned mCounter;
ProfilerAtomicUnsigned mNumber;
+ // Using OffTheBooksMutex here because we intentionally leak memory counters
+ // if they are initialized.
+ mozilla::DataMutexBase<bool, mozilla::OffTheBooksMutex> mRegistered;
};
// Defines a counter that is sampled on each profiler tick, with a running
diff --git a/tools/profiler/public/ProfilerState.h b/tools/profiler/public/ProfilerState.h
index 40e1517c91..aad74862b3 100644
--- a/tools/profiler/public/ProfilerState.h
+++ b/tools/profiler/public/ProfilerState.h
@@ -118,7 +118,10 @@
"every CPU core for every profiler sample.") \
\
MACRO(23, "bandwidth", Bandwidth, \
- "Record the network bandwidth used for every profiler sample.")
+ "Record the network bandwidth used for every profiler sample.") \
+ MACRO( \
+ 24, "memory", Memory, \
+ "Track the memory allocations and deallocations per process over time.")
// *** Synchronize with lists in BaseProfilerState.h and geckoProfiler.json ***
struct ProfilerFeature {
@@ -138,6 +141,12 @@ struct ProfilerFeature {
PROFILER_FOR_EACH_FEATURE(DECLARE)
#undef DECLARE
+
+ [[nodiscard]] static constexpr bool ShouldInstallMemoryHooks(
+ uint32_t aFeatures) {
+ return ProfilerFeature::HasMemory(aFeatures) ||
+ ProfilerFeature::HasNativeAllocations(aFeatures);
+ }
};
// clang-format off
diff --git a/tools/profiler/tests/gtest/moz.build b/tools/profiler/tests/gtest/moz.build
index e1c3994621..ea5ca1f228 100644
--- a/tools/profiler/tests/gtest/moz.build
+++ b/tools/profiler/tests/gtest/moz.build
@@ -30,7 +30,8 @@ LOCAL_INCLUDES += [
"/tools/profiler/lul",
]
-if CONFIG["OS_TARGET"] != "Android":
+# Bug 1885381 - Hangs/timeouts under TSAN
+if CONFIG["OS_TARGET"] != "Android" and not CONFIG["MOZ_TSAN"]:
UNIFIED_SOURCES += [
"GeckoProfiler.cpp",
"ThreadProfileTest.cpp",
diff --git a/tools/profiler/tests/xpcshell/test_feature_posix_signals.js b/tools/profiler/tests/xpcshell/test_feature_posix_signals.js
index 28fbf890e8..d4b77d6550 100644
--- a/tools/profiler/tests/xpcshell/test_feature_posix_signals.js
+++ b/tools/profiler/tests/xpcshell/test_feature_posix_signals.js
@@ -5,7 +5,7 @@
ChromeUtils.defineESModuleGetters(this, {
Downloads: "resource://gre/modules/Downloads.sys.mjs",
FileUtils: "resource://gre/modules/FileUtils.sys.mjs",
- BrowserTestUtils: "resource://testing-common/BrowserTestUtils.sys.mjs",
+ TestUtils: "resource://testing-common/TestUtils.sys.mjs",
});
const { ctypes } = ChromeUtils.importESModule(
@@ -68,23 +68,6 @@ function raiseSignal(pid, sig) {
return { ok: true };
}
-// We would like to use the following to wait for a stop signal to actually be
-// handled:
-// await Services.profiler.waitOnePeriodicSampling();
-// However, as we are trying to shut down the profiler using the sampler
-// thread, this can cause complications between the callback waiting for the
-// sampling to be over, and the sampler thread actually finishing.
-// Instead, we use the BrowserTestUtils.waitForCondition to wait until the
-// profiler is no longer active.
-async function waitUntilProfilerStopped(interval = 1000, maxTries = 100) {
- await BrowserTestUtils.waitForCondition(
- () => !Services.profiler.IsActive(),
- "the profiler should be inactive",
- interval,
- maxTries
- );
-}
-
async function cleanupAfterTest() {
// We need to cleanup written profiles after a test
// Get the system downloads directory, and use it to build a profile file
@@ -112,10 +95,46 @@ async function cleanupAfterTest() {
// may cause a mismatch if we test on on, say, a gnu hurd kernel, or on a
// linux kernel running on sparc, but the feature will not break - only
// the testing.
-// const SIGUSR1 = Services.appinfo.OS === "Darwin" ? 30 : 10;
+const SIGUSR1 = Services.appinfo.OS === "Darwin" ? 30 : 10;
const SIGUSR2 = Services.appinfo.OS === "Darwin" ? 31 : 12;
add_task(async () => {
+ info("Test that starting the profiler with a posix signal works.");
+
+ Assert.ok(
+ !Services.profiler.IsActive(),
+ "The profiler should not begin the test active."
+ );
+
+ // Get the process ID
+ let pid = Services.appinfo.processID;
+
+ // Set up an observer to watch for the profiler starting
+ let startPromise = TestUtils.topicObserved("profiler-started");
+
+ // Try and start the profiler using a signal.
+ let result = raiseSignal(pid, SIGUSR1);
+ Assert.ok(result, "Raising a signal should succeed");
+
+ // Wait for the profiler to stop
+ Assert.ok(await startPromise, "The profiler should start");
+
+ // Wait until the profiler is active
+ Assert.ok(Services.profiler.IsActive(), "The profiler should now be active.");
+
+ // Let the profiler sample at least once
+ await Services.profiler.waitOnePeriodicSampling();
+ info("Waiting a periodic sampling completed");
+
+ // Stop the profiler
+ await Services.profiler.StopProfiler();
+ Assert.ok(
+ !Services.profiler.IsActive(),
+ "The profiler should now be inactive."
+ );
+});
+
+add_task(async () => {
info("Test that stopping the profiler with a posix signal works.");
registerCleanupFunction(cleanupAfterTest);
@@ -136,13 +155,20 @@ add_task(async () => {
// Get the process ID
let pid = Services.appinfo.processID;
+ // Set up an observer to watch for the profiler stopping
+ let stopPromise = TestUtils.topicObserved("profiler-stopped");
+
// Try and stop the profiler using a signal.
let result = raiseSignal(pid, SIGUSR2);
Assert.ok(result, "Raising a SIGUSR2 signal should succeed.");
- await waitUntilProfilerStopped();
+ // Wait for the profiler to stop
+ Assert.ok(await stopPromise, "The profiler should stop");
- do_test_finished();
+ Assert.ok(
+ !Services.profiler.IsActive(),
+ "The profiler should now be inactive."
+ );
});
add_task(async () => {
@@ -174,21 +200,24 @@ add_task(async () => {
await Services.profiler.StartProfiler(entries, interval, threads, features);
Assert.ok(Services.profiler.IsActive(), "The profiler should now be active.");
+ // Set up an observer to watch for the profiler stopping
+ let stopPromise = TestUtils.topicObserved("profiler-stopped");
+
// Try and stop the profiler using a signal.
let result = raiseSignal(pid, SIGUSR2);
Assert.ok(result, "Raising a SIGUSR2 signal should succeed.");
- // Wait for the file to exist
- await BrowserTestUtils.waitForCondition(
- async () => await IOUtils.exists(profile.path),
- "Waiting for a profile file to be written to disk."
+ // Wait for the profiler to stop
+ Assert.ok(await stopPromise, "The profiler should stop");
+
+ // Now that it's stopped, make sure that we have a profile file
+ Assert.ok(
+ await IOUtils.exists(profile.path),
+ "A profile file should be written to disk."
);
- await waitUntilProfilerStopped();
Assert.ok(
!Services.profiler.IsActive(),
"The profiler should now be inactive."
);
-
- do_test_finished();
});
diff --git a/tools/profiler/tests/xpcshell/xpcshell.toml b/tools/profiler/tests/xpcshell/xpcshell.toml
index 2cde39d09f..8e58e1ff08 100644
--- a/tools/profiler/tests/xpcshell/xpcshell.toml
+++ b/tools/profiler/tests/xpcshell/xpcshell.toml
@@ -49,8 +49,10 @@ skip-if = [
["test_feature_posix_signals.js"]
skip-if = [
- "ccov",
- "os == 'win'",
+ "tsan", # We have intermittent timeout issues in TSan, see Bug 1889828
+ "ccov", # The signals for the profiler conflict with the ccov signals
+ "os == 'win'", # Not yet supported on windows
+ "os == 'android'", # Not yet supported on android
]
# Native stackwalking is somewhat unreliable depending on the platform.
diff --git a/tools/rewriting/Generated.txt b/tools/rewriting/Generated.txt
index f8aa8f24c6..c657d1d24d 100644
--- a/tools/rewriting/Generated.txt
+++ b/tools/rewriting/Generated.txt
@@ -23,8 +23,6 @@ dom/tests/ajax/mochikit/
intl/components/src/UnicodeScriptCodes.h
intl/unicharutil/util/nsSpecialCasingData.cpp
intl/unicharutil/util/nsUnicodePropertyData.cpp
-mobile/locales/l10n-changesets.json
-mobile/locales/l10n-onchange-changesets.json
mobile/android/**/.build-cache
mobile/android/**/.gradle
mobile/android/**/build
@@ -32,6 +30,50 @@ mobile/android/**/bin
mobile/android/**/generated
mobile/android/**\/local.properties
mobile/android/**\/manifest.json
+mobile/android/android-components/components/feature/search/src/main/assets/search/search_telemetry_v2.json
+mobile/android/android-components/components/browser/engine-system/src/main/res/
+mobile/android/android-components/components/browser/errorpages/src/main/res/
+mobile/android/android-components/components/browser/menu/src/main/res/
+mobile/android/android-components/components/browser/menu2/src/main/res/
+mobile/android/android-components/components/browser/toolbar/src/main/res/
+mobile/android/android-components/components/browser/toolbar2/src/main/res/
+mobile/android/android-components/components/compose/awesomebar/src/main/res/
+mobile/android/android-components/components/compose/browser-toolbar/src/main/res/
+mobile/android/android-components/components/compose/cfr/src/main/res/
+mobile/android/android-components/components/compose/tabstray/src/main/res/
+mobile/android/android-components/components/feature/addons/src/main/res/
+mobile/android/android-components/components/feature/app-links/src/main/res/
+mobile/android/android-components/components/feature/autofill/src/main/res/
+mobile/android/android-components/components/feature/awesomebar/src/main/res/
+mobile/android/android-components/components/feature/contextmenu/src/main/res/
+mobile/android/android-components/components/feature/customtabs/src/main/res/
+mobile/android/android-components/components/feature/downloads/src/main/res/
+mobile/android/android-components/components/feature/findinpage/src/main/res/
+mobile/android/android-components/components/feature/fxsuggest/src/main/res/
+mobile/android/android-components/components/feature/media/src/main/res/
+mobile/android/android-components/components/feature/privatemode/src/main/res/
+mobile/android/android-components/components/feature/prompts/src/main/res/
+mobile/android/android-components/components/feature/pwa/src/main/res/
+mobile/android/android-components/components/feature/qr/src/main/res/
+mobile/android/android-components/components/feature/readerview/src/main/res/
+mobile/android/android-components/components/feature/search/src/main/res/
+mobile/android/android-components/components/feature/sitepermissions/
+mobile/android/android-components/components/feature/tabs/src/main/res/
+mobile/android/android-components/components/feature/webnotifications/src/main/res/
+mobile/android/android-components/components/lib/crash/src/main/res/
+mobile/android/android-components/components/service/nimbus/src/main/res/
+mobile/android/android-components/components/support/base/src/main/res/
+mobile/android/android-components/components/support/ktx/src/main/res/
+mobile/android/android-components/components/support/utils/src/main/res/
+mobile/android/android-components/components/ui/tabcounter/src/main/res/
+mobile/android/android-components/components/ui/widgets/src/main/res/
+mobile/android/android-components/samples/glean/src/main/res/raw/initial_experiments.json
+mobile/android/fenix/app/src/debug/res/raw/initial_experiments.json
+mobile/android/fenix/app/src/main/res/
+mobile/android/fenix/app/src/main/res/raw/initial_experiments.json
+mobile/android/focus-android/app/src/main/res/
+mobile/locales/l10n-changesets.json
+mobile/locales/l10n-onchange-changesets.json
node_modules/
python/mozperftest/mozperftest/tests/data/
security/manager/tools/KnownRootHashes.json
diff --git a/tools/rewriting/ThirdPartyPaths.txt b/tools/rewriting/ThirdPartyPaths.txt
index 2f07ead2ea..8a0a3b9daa 100644
--- a/tools/rewriting/ThirdPartyPaths.txt
+++ b/tools/rewriting/ThirdPartyPaths.txt
@@ -36,6 +36,7 @@ dom/media/platforms/ffmpeg/ffmpeg57/
dom/media/platforms/ffmpeg/ffmpeg58/
dom/media/platforms/ffmpeg/ffmpeg59/
dom/media/platforms/ffmpeg/ffmpeg60/
+dom/media/platforms/ffmpeg/ffmpeg61/
dom/media/platforms/ffmpeg/libav53/
dom/media/platforms/ffmpeg/libav54/
dom/media/platforms/ffmpeg/libav55/
@@ -134,6 +135,9 @@ media/openmax_il/
media/webrtc/signaling/gtest/MockCall.h
mfbt/double-conversion/double-conversion/
mfbt/lz4/.*
+mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readability/JSDOMParser-0.4.2.js
+mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readability/readability-0.4.2.js
+mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readability/readability-readerable-0.4.2.js
mobile/android/exoplayer2/
modules/brotli/
modules/fdlibm/
@@ -180,6 +184,7 @@ testing/xpcshell/node-ws/
third_party/
toolkit/components/certviewer/content/vendor/
toolkit/components/jsoncpp/
+toolkit/components/ml/vendor/
toolkit/components/normandy/vendor/
toolkit/components/passwordmgr/PasswordRulesParser.sys.mjs
toolkit/components/protobuf/
diff --git a/tools/signing/macos/mach_commands.py b/tools/signing/macos/mach_commands.py
index 543faca2ea..a513ad7238 100644
--- a/tools/signing/macos/mach_commands.py
+++ b/tools/signing/macos/mach_commands.py
@@ -306,7 +306,7 @@ def macos_sign(
# and the channel argument (nightly, devedition, or release) we'll
# use different entitlements.
sourcedir = command_context.topsrcdir
- buildconfigpath = sourcedir + "/taskcluster/ci/config.yml"
+ buildconfigpath = sourcedir + "/taskcluster/config.yml"
command_context.log(
logging.INFO,
diff --git a/tools/tryselect/selectors/perf.py b/tools/tryselect/selectors/perf.py
index e8a6e6f9cc..96416829f7 100644
--- a/tools/tryselect/selectors/perf.py
+++ b/tools/tryselect/selectors/perf.py
@@ -198,7 +198,7 @@ class PerfParser(CompareParser):
"tests. If the Activity, Binary Path, or Intents required "
"change at all relative to the existing GeckoView, and Fenix "
"tasks, then you will need to make fixes in the associated "
- "taskcluster files (e.g. taskcluster/ci/test/browsertime-mobile.yml). "
+ "taskcluster files (e.g. taskcluster/kinds/test/browsertime-mobile.yml). "
"Alternatively, set MOZ_FIREFOX_ANDROID_APK_OUTPUT to a path to "
"an APK, and then run the command with --browsertime-upload-apk "
"firefox-android. This option will only copy the APK for browsertime, see "
diff --git a/tools/tryselect/selectors/release.py b/tools/tryselect/selectors/release.py
index fae85469ba..5ec88a989c 100644
--- a/tools/tryselect/selectors/release.py
+++ b/tools/tryselect/selectors/release.py
@@ -126,7 +126,7 @@ def run(
}
)
- with open(os.path.join(vcs.path, "taskcluster/ci/config.yml")) as f:
+ with open(os.path.join(vcs.path, "taskcluster/config.yml")) as f:
migration_configs = yaml.safe_load(f)
for migration in migrations:
migration_config = migration_configs["merge-automation"]["behaviors"][migration]
diff --git a/tools/tryselect/task_config.py b/tools/tryselect/task_config.py
index 58e8beeda4..0bf9731eee 100644
--- a/tools/tryselect/task_config.py
+++ b/tools/tryselect/task_config.py
@@ -610,7 +610,7 @@ class WorkerOverrides(TryConfig):
if worker_suffixes:
root = build.topsrcdir
- root = os.path.join(root, "taskcluster", "ci")
+ root = os.path.join(root, "taskcluster")
graph_config = load_graph_config(root)
for worker_suffix in worker_suffixes:
alias, suffix = worker_suffix.split("=", 1)
diff --git a/tools/tryselect/tasks.py b/tools/tryselect/tasks.py
index 701d1c1ade..46abd3546b 100644
--- a/tools/tryselect/tasks.py
+++ b/tools/tryselect/tasks.py
@@ -78,7 +78,7 @@ def generate_tasks(params=None, full=False, disable_target_task_filter=False):
"target_tasks_method": target_tasks_method,
},
)
- root = os.path.join(build.topsrcdir, "taskcluster", "ci")
+ root = os.path.join(build.topsrcdir, "taskcluster")
taskgraph.fast = True
generator = TaskGraphGenerator(root_dir=root, parameters=params)
diff --git a/tools/ts/fixtures/intrinsics.d.ts b/tools/ts/fixtures/intrinsics.d.ts
index 7a0b45ee52..125e401eae 100644
--- a/tools/ts/fixtures/intrinsics.d.ts
+++ b/tools/ts/fixtures/intrinsics.d.ts
@@ -1,30 +1,49 @@
/**
- * Gecko XPCOM builtins and utility types.
+ * Gecko XPCOM builtins.
*/
+declare global {
+ /**
+ * Generic IDs are created by most code which passes a nsID to js.
+ * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#24
+ */
+ interface nsID<uuid = string> {
+ readonly number: uuid;
+ }
-/**
- * Generic IDs are created by most code which passes a nsID to js.
- * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#24
- */
-interface nsID<uuid = string> {
- readonly number: uuid;
+ /**
+ * In addition to nsID, interface IIDs support instanceof type guards,
+ * and expose constants defined on the class, including variants from enums.
+ * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#45
+ */
+ type nsJSIID<iface, enums = {}> = nsID & Constants<iface> & enums & {
+ new (_: never): void;
+ prototype: iface;
+ }
+
+ /** A union type of all known interface IIDs. */
+ type nsIID = nsIXPCComponents_Interfaces[keyof nsIXPCComponents_Interfaces];
+
+ /** A generic to resolve QueryInterface return type from a nsIID. */
+ export type nsQIResult<iid> = iid extends { prototype: infer U } ? U : never;
+
+ /** u32 */
+ type nsresult = u32;
+
+ // Numeric typedefs, useful as a quick reference in method signatures.
+ type double = number;
+ type float = number;
+ type i16 = number;
+ type i32 = number;
+ type i64 = number;
+ type u16 = number;
+ type u32 = number;
+ type u64 = number;
+ type u8 = number;
}
/**
- * In addition to nsID, interface IIDs support instanceof type guards,
- * and expose constants defined on the class, including variants from enums.
- * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#44
+ * XPCOM utility types.
*/
-type nsJSIID<iface, enums = {}> = nsID & Constants<iface> & enums & {
- new (_: never): void;
- prototype: iface;
-}
-
-/** A union of all known IIDs. */
-type nsIID = nsIXPCComponents_Interfaces[keyof nsIXPCComponents_Interfaces];
-
-/** A generic to resolve QueryInterface return type from a nsID (or nsIID). */
-export type nsQIResult<iid> = iid extends { prototype: infer U } ? U : never;
/** XPCOM inout param is passed in as a js object with a value property. */
type InOutParam<T> = { value: T };
@@ -32,7 +51,7 @@ type InOutParam<T> = { value: T };
/** XPCOM out param is written to the passed in object's value property. */
type OutParam<T> = { value?: T };
-/** A named type for interfaces to inherit from enums. */
+/** A named type to enable interfaces to inherit from enums. */
type Enums<enums> = enums;
/** Callable accepts either form of a [function] interface. */
@@ -44,42 +63,4 @@ type Constants<T> = { [K in keyof T as IfConst<K, T[K]>]: T[K] };
/** Resolves only for keys K whose corresponding type T is a narrow number. */
type IfConst<K, T> = T extends number ? (number extends T ? never : K) : never;
-declare global {
- // Until we have [ChromeOnly] webidl.
- interface BrowsingContext {}
- interface ContentFrameMessageManager {}
- interface DOMRequest {}
- interface FrameLoader {}
- interface JSProcessActorChild {}
- interface JSProcessActorParent {}
- interface TreeColumn {}
- interface WebExtensionContentScript {}
- interface WebExtensionPolicy {}
- interface WindowGlobalParent {}
- interface WindowContext {}
- interface XULTreeElement {}
-}
-
-// Non-scriptable interfaces referenced from scriptable ones.
-interface nsIAsyncVerifyRedirectReadyCallback {}
-interface nsICRLiteTimestamp {}
-interface nsIInputAvailableCallback {}
-interface nsIScriptElement {}
-interface nsIThreadObserver {}
-interface nsIUDPSocketSyncListener {}
-interface nsIWebAuthnRegisterArgs {}
-interface nsIWebAuthnRegisterPromise {}
-interface nsIWebAuthnSignArgs {}
-interface nsIWebAuthnSignPromise {}
-interface nsIXPCScriptable {}
-
-// Typedefs useful as a quick reference in method signatures.
-type double = number;
-type float = number;
-type i16 = number;
-type i32 = number;
-type i64 = number;
-type u16 = number;
-type u32 = number;
-type u64 = number;
-type u8 = number;
+export {};
diff --git a/tools/ts/fixtures/xpctest.d.ts b/tools/ts/fixtures/xpctest.d.ts
index 6b2863a656..cf705832b6 100644
--- a/tools/ts/fixtures/xpctest.d.ts
+++ b/tools/ts/fixtures/xpctest.d.ts
@@ -160,7 +160,7 @@ interface nsIXPCTestUtils extends nsISupports {
doubleWrapFunction(f: nsIXPCTestFunctionInterface): nsIXPCTestFunctionInterface;
}
-interface nsIXPCTestNoScriptMembers extends nsISupports {
+interface nsIXPCTestTypeScript extends nsISupports {
exposedProp: i32;
exposedMethod(arg: i32): void;
}
@@ -178,43 +178,60 @@ interface nsIXPCComponents_Interfaces {
nsIXPCTestReturnCodeChild: nsJSIID<nsIXPCTestReturnCodeChild>;
nsIXPCTestFunctionInterface: nsJSIID<nsIXPCTestFunctionInterface>;
nsIXPCTestUtils: nsJSIID<nsIXPCTestUtils>;
- nsIXPCTestNoScriptMembers: nsJSIID<nsIXPCTestNoScriptMembers>;
+ nsIXPCTestTypeScript: nsJSIID<nsIXPCTestTypeScript>;
}
} // global
// Typedefs from xpidl.
type PRTime = i64;
-type char16_t = u16;
-type nsresult = u32;
/**
- * Gecko XPCOM builtins and utility types.
+ * Gecko XPCOM builtins.
*/
-
-/**
- * Generic IDs are created by most code which passes a nsID to js.
- * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#24
- */
-interface nsID<uuid = string> {
- readonly number: uuid;
+declare global {
+ /**
+ * Generic IDs are created by most code which passes a nsID to js.
+ * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#24
+ */
+ interface nsID<uuid = string> {
+ readonly number: uuid;
+ }
+
+ /**
+ * In addition to nsID, interface IIDs support instanceof type guards,
+ * and expose constants defined on the class, including variants from enums.
+ * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#45
+ */
+ type nsJSIID<iface, enums = {}> = nsID & Constants<iface> & enums & {
+ new (_: never): void;
+ prototype: iface;
+ }
+
+ /** A union type of all known interface IIDs. */
+ type nsIID = nsIXPCComponents_Interfaces[keyof nsIXPCComponents_Interfaces];
+
+ /** A generic to resolve QueryInterface return type from a nsIID. */
+ export type nsQIResult<iid> = iid extends { prototype: infer U } ? U : never;
+
+ /** u32 */
+ type nsresult = u32;
+
+ // Numeric typedefs, useful as a quick reference in method signatures.
+ type double = number;
+ type float = number;
+ type i16 = number;
+ type i32 = number;
+ type i64 = number;
+ type u16 = number;
+ type u32 = number;
+ type u64 = number;
+ type u8 = number;
}
/**
- * In addition to nsID, interface IIDs support instanceof type guards,
- * and expose constants defined on the class, including variants from enums.
- * https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#44
+ * XPCOM utility types.
*/
-type nsJSIID<iface, enums = {}> = nsID & Constants<iface> & enums & {
- new (_: never): void;
- prototype: iface;
-}
-
-/** A union of all known IIDs. */
-type nsIID = nsIXPCComponents_Interfaces[keyof nsIXPCComponents_Interfaces];
-
-/** A generic to resolve QueryInterface return type from a nsID (or nsIID). */
-export type nsQIResult<iid> = iid extends { prototype: infer U } ? U : never;
/** XPCOM inout param is passed in as a js object with a value property. */
type InOutParam<T> = { value: T };
@@ -222,7 +239,7 @@ type InOutParam<T> = { value: T };
/** XPCOM out param is written to the passed in object's value property. */
type OutParam<T> = { value?: T };
-/** A named type for interfaces to inherit from enums. */
+/** A named type to enable interfaces to inherit from enums. */
type Enums<enums> = enums;
/** Callable accepts either form of a [function] interface. */
@@ -234,42 +251,4 @@ type Constants<T> = { [K in keyof T as IfConst<K, T[K]>]: T[K] };
/** Resolves only for keys K whose corresponding type T is a narrow number. */
type IfConst<K, T> = T extends number ? (number extends T ? never : K) : never;
-declare global {
- // Until we have [ChromeOnly] webidl.
- interface BrowsingContext {}
- interface ContentFrameMessageManager {}
- interface DOMRequest {}
- interface FrameLoader {}
- interface JSProcessActorChild {}
- interface JSProcessActorParent {}
- interface TreeColumn {}
- interface WebExtensionContentScript {}
- interface WebExtensionPolicy {}
- interface WindowGlobalParent {}
- interface WindowContext {}
- interface XULTreeElement {}
-}
-
-// Non-scriptable interfaces referenced from scriptable ones.
-interface nsIAsyncVerifyRedirectReadyCallback {}
-interface nsICRLiteTimestamp {}
-interface nsIInputAvailableCallback {}
-interface nsIScriptElement {}
-interface nsIThreadObserver {}
-interface nsIUDPSocketSyncListener {}
-interface nsIWebAuthnRegisterArgs {}
-interface nsIWebAuthnRegisterPromise {}
-interface nsIWebAuthnSignArgs {}
-interface nsIWebAuthnSignPromise {}
-interface nsIXPCScriptable {}
-
-// Typedefs useful as a quick reference in method signatures.
-type double = number;
-type float = number;
-type i16 = number;
-type i32 = number;
-type i64 = number;
-type u16 = number;
-type u32 = number;
-type u64 = number;
-type u8 = number;
+export {};