From 8a3424082c42f98d170a67b55d347069da226702 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 19:15:32 +0800 Subject: [PATCH 01/85] switch app-builder-bin to node-module-collector --- packages/app-builder-lib/package.json | 3 ++- packages/app-builder-lib/src/util/appFileCopier.ts | 8 +++++--- packages/app-builder-lib/src/util/packageDependencies.ts | 2 +- pnpm-lock.yaml | 8 ++++++++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/app-builder-lib/package.json b/packages/app-builder-lib/package.json index de96a6fe511..a276eb61772 100644 --- a/packages/app-builder-lib/package.json +++ b/packages/app-builder-lib/package.json @@ -77,7 +77,8 @@ "sanitize-filename": "^1.6.3", "semver": "^7.3.8", "tar": "^6.1.12", - "temp-file": "^3.4.0" + "temp-file": "^3.4.0", + "node-module-collector": "1.1.0" }, "///": "babel in devDependencies for proton tests", "devDependencies": { diff --git a/packages/app-builder-lib/src/util/appFileCopier.ts b/packages/app-builder-lib/src/util/appFileCopier.ts index cd3b8f82247..7dbf38d98ce 100644 --- a/packages/app-builder-lib/src/util/appFileCopier.ts +++ b/packages/app-builder-lib/src/util/appFileCopier.ts @@ -13,6 +13,7 @@ import { PlatformPackager } from "../platformPackager" import { AppFileWalker } from "./AppFileWalker" import { NodeModuleCopyHelper } from "./NodeModuleCopyHelper" import { NodeModuleInfo } from "./packageDependencies" +import { getNodeModules } from "node-module-collector" const BOWER_COMPONENTS_PATTERN = `${path.sep}bower_components${path.sep}` /** @internal */ @@ -181,7 +182,8 @@ function validateFileSet(fileSet: ResolvedFileSet): ResolvedFileSet { /** @internal */ export async function computeNodeModuleFileSets(platformPackager: PlatformPackager, mainMatcher: FileMatcher): Promise> { - const deps = (await platformPackager.info.getNodeDependencyInfo(platformPackager.platform).value) as Array + const deps = (await getNodeModules(platformPackager.info.appDir)) as NodeModuleInfo[] + log.debug({ nodeModules: deps }, "collected node modules") const nodeModuleExcludedExts = getNodeModuleExcludedExts(platformPackager) // serial execution because copyNodeModules is concurrent and so, no need to increase queue/pressure @@ -213,8 +215,8 @@ export async function computeNodeModuleFileSets(platformPackager: PlatformPackag const files = await copier.collectNodeModules(dep, nodeModuleExcludedExts) result[index++] = validateFileSet({ src: source, destination, files, metadata: copier.metadata }) - if (dep.conflictDependency) { - for (const c of dep.conflictDependency) { + if (dep.dependencies) { + for (const c of dep.dependencies) { await collectNodeModules(c, realSource, path.join(destination, NODE_MODULES, c.name)) } } diff --git a/packages/app-builder-lib/src/util/packageDependencies.ts b/packages/app-builder-lib/src/util/packageDependencies.ts index 907c452ec59..86e11442a57 100644 --- a/packages/app-builder-lib/src/util/packageDependencies.ts +++ b/packages/app-builder-lib/src/util/packageDependencies.ts @@ -23,5 +23,5 @@ export interface NodeModuleInfo { readonly name: string readonly version: string readonly dir: string - readonly conflictDependency: Array + readonly dependencies?: Array } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a014a3a79a..95bb6c22b94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -161,6 +161,9 @@ importers: minimatch: specifier: ^10.0.0 version: 10.0.1 + node-module-collector: + specifier: 1.1.0 + version: 1.1.0 resedit: specifier: ^1.7.0 version: 1.7.1 @@ -4928,6 +4931,9 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-module-collector@1.1.0: + resolution: {integrity: sha512-n7lb6sr0uHk3RFOaIIk9LDclkMd7p/0RSpz2F3956Vmgx/vqy3EfNfFOJU+jblbZuBdqwcDsEK0ZzpHYhtV4jw==} + node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -11979,6 +11985,8 @@ snapshots: node-int64@0.4.0: {} + node-module-collector@1.1.0: {} + node-releases@2.0.14: {} nopt@1.0.10: From f438899bf26d81ebcfbebe25b5a373acb4cb0c3b Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 19:58:40 +0800 Subject: [PATCH 02/85] fix ut --- .../test-app-yarn-workspace/packages/test-app/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json b/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json index 10f4eebbe46..24e32dfbe74 100644 --- a/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json +++ b/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json @@ -23,6 +23,6 @@ "@sentry/core": "0.5.4" }, "optionalDependencies": { - "unresolved": "^2.0.5" + "ms": "2.0.0" } } From 8523bfd14fc7eeafafc803e07de14d4abae719f2 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 20:10:37 +0800 Subject: [PATCH 03/85] fix ut --- test/src/globTest.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 613834277c2..5906ac6b949 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -168,6 +168,7 @@ test.ifAll.ifDevOrLinuxCi("ignore node_modules", () => { //noinspection SpellCheckingInspection data.dependencies = { "ci-info": "2.0.0", + "electron": "32.1.0", "@electron/remote": "2.1.2", } }), From 5748dff9f334fb9aadaa02ed0c78ff905ecc6327 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 20:17:57 +0800 Subject: [PATCH 04/85] fix ut --- test/src/globTest.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 5906ac6b949..5bd4897fc00 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -168,8 +168,7 @@ test.ifAll.ifDevOrLinuxCi("ignore node_modules", () => { //noinspection SpellCheckingInspection data.dependencies = { "ci-info": "2.0.0", - "electron": "32.1.0", - "@electron/remote": "2.1.2", + "@types/node": "14.17.0", } }), packed: context => { From 150f03178c313688261131fd0591b90a4a1f996a Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 20:34:17 +0800 Subject: [PATCH 05/85] delete ut --- test/src/globTest.ts | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 5bd4897fc00..0c0999685b9 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -124,33 +124,6 @@ test.ifNotWindows( ) ) -// cannot be enabled -// https://github.com/electron-userland/electron-builder/issues/611 -test.ifDevOrLinuxCi("failed peer dep", () => { - return assertPack( - "test-app-one", - { - targets: Platform.LINUX.createTarget(DIR_TARGET), - }, - { - isInstallDepsBefore: true, - projectDirCreated: projectDir => - modifyPackageJson(projectDir, data => { - //noinspection SpellCheckingInspection - data.dependencies = { - debug: "4.1.1", - "rc-datepicker": "4.0.0", - react: "15.2.1", - "react-dom": "15.2.1", - } - }), - packed: context => { - return verifySmartUnpack(context.getResources(Platform.LINUX)) - }, - } - ) -}) - test.ifAll.ifDevOrLinuxCi("ignore node_modules", () => { return assertPack( "test-app-one", From 3c38a9e4a4407f980f564e86b1f0274d580d06f3 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 20:38:16 +0800 Subject: [PATCH 06/85] fix ut --- test/snapshots/BuildTest.js.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/snapshots/BuildTest.js.snap b/test/snapshots/BuildTest.js.snap index d5919e818e5..f44f0c1ba25 100644 --- a/test/snapshots/BuildTest.js.snap +++ b/test/snapshots/BuildTest.js.snap @@ -5184,8 +5184,8 @@ Array [ exports[`win smart unpack 4`] = ` Array [ - "node_modules/@electron-builder/test-smart-unpack/package.json", "node_modules/@electron-builder/test-smart-unpack-empty/package.json", + "node_modules/@electron-builder/test-smart-unpack/package.json", "node_modules/debug/.coveralls.yml", "node_modules/debug/.eslintrc", "node_modules/debug/.npmignore", From 4e10883f4fcec3838edf8e4870ecc33378edded3 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 20:41:20 +0800 Subject: [PATCH 07/85] fix ut --- test/src/globTest.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 0c0999685b9..0a1e15385c7 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -5,7 +5,6 @@ import * as path from "path" import * as fs from "fs/promises" import { assertThat } from "./helpers/fileAssert" import { app, assertPack, modifyPackageJson, PackedContext, removeUnstableProperties, verifyAsarFileTree } from "./helpers/packTester" -import { verifySmartUnpack } from "./helpers/verifySmartUnpack" async function createFiles(appDir: string) { await Promise.all([ From 4ea2d5375687ab5cf3ed67e5d31f495af1ebf87b Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 21:21:55 +0800 Subject: [PATCH 08/85] fix ut --- package.json | 1 - .../node_modules/.yarn-integrity | 14 +- .../node_modules/foo | 1 - .../node_modules/foo/package.json | 10 ++ .../node_modules/test-app | 1 - .../node_modules/test-app/index.html | 25 +++ .../node_modules/test-app/index.js | 77 +++++++++ .../node_modules/electron-log/LICENSE | 21 +++ .../node_modules/electron-log/README.md | 163 ++++++++++++++++++ .../electron-log/electron-log.d.ts | 60 +++++++ .../node_modules/electron-log/index.js | 7 + .../node_modules/electron-log/lib/format.js | 41 +++++ .../node_modules/electron-log/lib/log.js | 42 +++++ .../electron-log/lib/transports/console.js | 18 ++ .../lib/transports/file/find-log-path.js | 96 +++++++++++ .../lib/transports/file/get-app-name.js | 91 ++++++++++ .../electron-log/lib/transports/file/index.js | 96 +++++++++++ .../electron-log/lib/transports/log-s.js | 86 +++++++++ .../lib/transports/renderer-console.js | 24 +++ .../node_modules/electron-log/main.js | 50 ++++++ .../node_modules/electron-log/package.json | 56 ++++++ .../node_modules/electron-log/renderer.js | 48 ++++++ .../node_modules/test-app/package.json | 25 +++ 23 files changed, 1039 insertions(+), 14 deletions(-) delete mode 120000 test/fixtures/test-app-yarn-several-workspace/node_modules/foo create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/foo/package.json delete mode 120000 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.html create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/LICENSE create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/README.md create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/electron-log.d.ts create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/index.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/format.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/log.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/console.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/find-log-path.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/get-app-name.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/index.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/log-s.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/renderer-console.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/main.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/package.json create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/renderer.js create mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/package.json diff --git a/package.json b/package.json index 19195d2fdbb..fd524fed806 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,6 @@ "node": ">=14.14", "pnpm": ">=9" }, - "packageManager": "pnpm@9.4.0", "pnpm": { "patchedDependencies": { "@changesets/cli@2.27.8": "patches/@changesets__cli@2.27.8.patch" diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity b/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity index d4af20d9ae5..ab09f11b3c5 100644 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity @@ -1,20 +1,12 @@ { + "systemParams": "win32-x64-115", "modulesFolders": [ "node_modules", "node_modules", - "packages/test-app/node_modules" + "packages\\test-app\\node_modules" ], "flags": [], - "linkedModules": [ - "dmd", - "dmd-tf", - "docdash", - "electron-auto-updater", - "electron-download-tf", - "electron-vue-scripts", - "electron-webpack", - "jest-cli" - ], + "linkedModules": [], "topLevelPatterns": [ "electron-log@2.2.8", "electron-log@2.2.9", diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/foo b/test/fixtures/test-app-yarn-several-workspace/node_modules/foo deleted file mode 120000 index 61d898a3a60..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/foo +++ /dev/null @@ -1 +0,0 @@ -../packages/foo \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/foo/package.json b/test/fixtures/test-app-yarn-several-workspace/node_modules/foo/package.json new file mode 100644 index 00000000000..28a5b85beef --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/foo/package.json @@ -0,0 +1,10 @@ +{ + "name": "foo", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "dependencies": { + "ms": "2.0.0", + "electron-log": "2.2.8" + } +} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app deleted file mode 120000 index 6d4c4c138ca..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app +++ /dev/null @@ -1 +0,0 @@ -../packages/test-app \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.html b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.html new file mode 100644 index 00000000000..a25b3367d5e --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.html @@ -0,0 +1,25 @@ + + + + + Hello World! + + + +

Hello World!

+ We are using node , + Chrome , + and Electron . + + Args: . + + Env: . + + + + diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.js new file mode 100644 index 00000000000..c7e706aa9db --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.js @@ -0,0 +1,77 @@ +'use strict' + +const { app, ipcMain, BrowserWindow, Menu, Tray } = require("electron") +const fs = require("fs") +const path = require("path") + +// Module to control application life. +// Module to create native browser window. + +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +let mainWindow; + +let tray = null + +function createWindow () { + if (process.platform === "linux" && process.env.APPDIR != null) { + tray = new Tray(path.join(process.env.APPDIR, "testapp.png")) + const contextMenu = Menu.buildFromTemplate([ + {label: 'Item1', type: 'radio'}, + {label: 'Item2', type: 'radio'}, + {label: 'Item3', type: 'radio', checked: true}, + {label: 'Item4', type: 'radio'} + ]) + tray.setToolTip('This is my application.') + tray.setContextMenu(contextMenu) + } + + // Create the browser window. + mainWindow = new BrowserWindow({width: 800, height: 600}); + + // and load the index.html of the app. + mainWindow.loadURL('file://' + __dirname + '/index.html'); + + // Open the DevTools. + mainWindow.webContents.openDevTools(); + + mainWindow.webContents.executeJavaScript(`console.log("appData: ${app.getPath("appData").replace(/\\/g, "\\\\")}")`) + mainWindow.webContents.executeJavaScript(`console.log("userData: ${app.getPath("userData").replace(/\\/g, "\\\\")}")`) + + // Emitted when the window is closed. + mainWindow.on('closed', function() { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null; + }); +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +app.on('ready', createWindow); + +// Quit when all windows are closed. +app.on('window-all-closed', function () { + // On MacOS it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +app.on("activate", function () { + if (mainWindow === null) { + createWindow() + } +}) + +ipcMain.on("saveAppData", () => { + try { + // electron doesn't escape / in the product name + fs.writeFileSync(path.join(app.getPath("appData"), "Test App ßW", "testFile"), "test") + } + catch (e) { + mainWindow.webContents.executeJavaScript(`console.log(\`userData: ${e}\`)`) + } +}) \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/LICENSE b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/LICENSE new file mode 100644 index 00000000000..1f7f7e1438c --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Alexey Prokhorov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/README.md b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/README.md new file mode 100644 index 00000000000..a1ab28fa943 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/README.md @@ -0,0 +1,163 @@ +# electron-log +[![Build Status](https://travis-ci.org/megahertz/electron-log.svg?branch=master)](https://travis-ci.org/megahertz/electron-log) +[![NPM version](https://badge.fury.io/js/electron-log.svg)](https://badge.fury.io/js/electron-log) +[![Dependencies status](https://david-dm.org/megahertz/electron-log/status.svg)](https://david-dm.org/megahertz/electron-log) + +## Description + +Just a simple logging module for your Electron or NW.js application. +No dependencies. No complicated configuration. Just require and use. +It can be used without Electron. + +By default it writes logs to the following locations: + + * **on Linux:** `~/.config//log.log` + * **on OS X:** `~/Library/Logs//log.log` + * **on Windows:** `%USERPROFILE%\AppData\Roaming\\log.log` + +## Installation + +Install with [npm](https://npmjs.org/package/electron-log): + + npm install electron-log + +## Usage + +```js +var log = require('electron-log'); + +log.info('Hello, log'); +``` +### Log levels + +electron-log supports the following log levels: + + error, warn, info, verbose, debug, silly + +### Transport + +Transport is a simple function which requires an object which describes +a message. By default, two transports are active: console and file. +Please be aware that the file log level is 'warn' by default, so info +and debug messages will be filtered. The file path is dependent on the +current platform. + + + +#### Disable default transport: + +```js +log.transports.file.level = false; +log.transports.console.level = false; +``` + +#### Override transport: + +```js +var format = require('util'); + +log.transports.console = function(msg) { + var text = util.format.apply(util, msg.data); + console.log(`[${msg.date.toLocaleTimeString()} ${msg.level}] ${text}`); +}; +``` +Please be aware that if you override a transport function the default +transport options (like level or format) will be undefined. + +#### Console Transport + +```js +// Log level +log.transports.console.level = 'warn'; + +/** + * Set output format template. Available variables: + * Main: {level}, {text} + * Date: {y},{m},{d},{h},{i},{s},{ms} + */ +log.transports.console.format = '{h}:{i}:{s}:{ms} {text}'; + +// Set a function which formats output +log.transports.console.format = (msg) => util.format.apply(util, msg.data); +``` + +#### Renderer Console transport +Show logs in Chromium DevTools Console. It has the same options as +console transport. + +#### File transport + +```js +// Same as for console transport +log.transports.file.level = 'warn'; +log.transports.file.format = '{h}:{i}:{s}:{ms} {text}'; + +// Set approximate maximum log size in bytes. When it exceeds, +// the archived log will be saved as the log.old.log file +log.transports.file.maxSize = 5 * 1024 * 1024; + +// Write to this file, must be set before first logging +log.transports.file.file = __dirname + '/log.txt'; + +// fs.createWriteStream options, must be set before first logging +log.transports.file.streamConfig = { flags: 'w' }; + +// set existed file stream +log.transports.file.stream = fs.createWriteStream('log.txt'); +``` + +By default, file transport reads a productName or name property from +package.json to determine a log path like +`~/.config//log.log`. If you have no package.json or you want +to specify another path, just set the appName property: + +```js +log.transports.file.appName = 'test'; +``` +This value should be set before the first log method call. + +## Renderer process + +Since version 2.0.0 this package works differently in main and renderer +processes. When it's included in a renderer process it sends logs to +the main process through IPC. There are no API changes, you can still +require the package by the same way both in main and renderer processes, +but please be aware that transport configuration is available only +inside the main process. + +## Change Log + +**2.1.0** + - Add Renderer Console transport + +**2.0.0** + - Move log.appName property to log.transports.file.appName. + - Change a log message object. See updated + [Override transport section](#override-transport) if you use a custom + transport. + - Now it's not possible to configure transports from a renderer + process, only from the main. + - To disable a transport set its level to false. + - Fix problems when this package is used from a renderer process. + - Add Typescript definitions. + - Add [log-s](https://github.com/megahertz/log-s) transport + (experimental). + - Fix file transport appName detection when an application is run + in dev environment (through `electron .` or similar way) + +**1.3.0** + +- #18 Rename 'warning' log level to 'warn' + +**1.2.0** + + - #14 Use native console levels instead of console.log + +**1.0.16** + + - Prefer to use package.json:productName instead of package.json:name + to determine a log path. + +## License + +Licensed under MIT. diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/electron-log.d.ts b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/electron-log.d.ts new file mode 100644 index 00000000000..af2527a1086 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/electron-log.d.ts @@ -0,0 +1,60 @@ +export type LogLevel = "error" | "warn" | "info" | "verbose" | "debug" | "silly"; +export type LevelOption = LogLevel | false; + +export type IFormat = (msg: ILogMessage) => void; + +export interface ILogMessage { + data: any[]; + date: Date; + level: LogLevel; +} + +export interface IConsoleTransport { + (msg: ILogMessage): void; + level: LevelOption; + format: IFormat | string; +} + +export interface IFileTransport { + (msg: ILogMessage): void; + appName?: string; + file?: string; + format: IFormat | string; + level: LevelOption; + maxSize: number; + streamConfig?: object; + findLogPath(appName: string): string; +} + +export interface ILogSTransport { + (msg: ILogMessage): void; + client: object; + depth: number; + level: LevelOption; + url?: string; +} + +export declare function error(...params: any[]): void; +export declare function warn(...params: any[]): void; +export declare function info(...params: any[]): void; +export declare function verbose(...params: any[]): void; +export declare function debug(...params: any[]): void; +export declare function silly(...params: any[]): void; + +export declare const transports: { + console: IConsoleTransport; + file: IFileTransport; + logS: ILogSTransport; + rendererConsole: IConsoleTransport; +}; + +// tslint:disable object-literal-sort-keys +export default { + error, + warn, + info, + verbose, + debug, + silly, + transports, +}; diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/index.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/index.js new file mode 100644 index 00000000000..ece47214b63 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/index.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.type === 'renderer') { + module.exports = require('./renderer'); +} else { + module.exports = require('./main'); +} \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/format.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/format.js new file mode 100644 index 00000000000..fa96c0144b9 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/format.js @@ -0,0 +1,41 @@ +'use strict'; + +var util = require('util'); +var EOL = require('os').EOL; + +module.exports = { + format: format, + pad: pad, + stringifyArray: stringifyArray +}; + +function format(msg, formatter) { + if (typeof formatter === 'function') { + return formatter(msg); + } + + var date = msg.date; + + return formatter + .replace('{level}', msg.level) + .replace('{text}', stringifyArray(msg.data)) + .replace('{y}', date.getFullYear()) + .replace('{m}', pad(date.getMonth() + 1)) + .replace('{d}', pad(date.getDate())) + .replace('{h}', pad(date.getHours())) + .replace('{i}', pad(date.getMinutes())) + .replace('{s}', pad(date.getSeconds())) + .replace('{ms}', pad(date.getMilliseconds(), 3)); +} + +function stringifyArray(data) { + data = data.map(function formatErrors(arg) { + return arg instanceof Error ? arg.stack + EOL : arg; + }); + return util.format.apply(util, data); +} + +function pad(number, zeros) { + zeros = zeros || 2; + return (new Array(zeros + 1).join('0') + number).substr(-zeros, zeros); +} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/log.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/log.js new file mode 100644 index 00000000000..9be83d6ed72 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/log.js @@ -0,0 +1,42 @@ +// jshint -W040 +'use strict'; + +var LEVELS = ['error', 'warn', 'info', 'verbose', 'debug', 'silly']; + +module.exports = log; + +function log(transports, level, text) { + var data = Array.prototype.slice.call(arguments, 2); + + var msg = { + data: data, + date: new Date(), + level: level + }; + + for (var i in transports) { + // jshint -W089 + if (!transports.hasOwnProperty(i) || typeof transports[i] !== 'function') { + continue; + } + + var transport = transports[i]; + + if (transport === false || !compareLevels(transport.level, level)) { + continue; + } + + if (transport.level === false) continue; + + transport.call(null, msg); + } +} + +function compareLevels(passLevel, checkLevel) { + var pass = LEVELS.indexOf(passLevel); + var check = LEVELS.indexOf(checkLevel); + if (check === -1 || pass === -1) { + return true; + } + return check <= pass; +} \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/console.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/console.js new file mode 100644 index 00000000000..880d44c55e2 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/console.js @@ -0,0 +1,18 @@ +'use strict'; + +var format = require('../format'); + +transport.level = 'silly'; +transport.format = '[{h}:{i}:{s}.{ms}] [{level}] {text}'; + +module.exports = transport; + +function transport(msg) { + var text = format.format(msg, transport.format); + if (console[msg.level]) { + console[msg.level](text); + } else { + console.log(text); + } +} + diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/find-log-path.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/find-log-path.js new file mode 100644 index 00000000000..7eba2300fb3 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/find-log-path.js @@ -0,0 +1,96 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var os = require('os'); +var getAppName = require('./get-app-name'); + +module.exports = findLogPath; + +/** + * Try to determine a platform-specific path where can write logs + * @param {string} [appName] Used to determine the last part of a log path + * @return {string|boolean} + */ +function findLogPath(appName) { + appName = appName || getAppName(); + if (!appName) { + return false; + } + + var homeDir = os.homedir ? os.homedir() : process.env['HOME']; + + var dir; + switch (process.platform) { + case 'linux': { + dir = prepareDir(process.env['XDG_CONFIG_HOME'], appName) + .or(homeDir, '.config', appName) + .or(process.env['XDG_DATA_HOME'], appName) + .or(homeDir, '.local', 'share', appName) + .result; + break; + } + + case 'darwin': { + dir = prepareDir(homeDir, 'Library', 'Logs', appName) + .or(homeDir, 'Library', 'Application Support', appName) + .result; + break; + } + + case 'win32': { + dir = prepareDir(process.env['APPDATA'], appName) + .or(homeDir, 'AppData', 'Roaming', appName) + .result; + break; + } + } + + if (dir) { + return path.join(dir, 'log.log'); + } else { + return false; + } +} + + + +function prepareDir(dirPath) { + // jshint -W040 + if (!this || this.or !== prepareDir || !this.result) { + if (!dirPath) { + return { or: prepareDir }; + } + + //noinspection JSCheckFunctionSignatures + dirPath = path.join.apply(path, arguments); + mkDir(dirPath); + + try { + fs.accessSync(dirPath, fs.W_OK); + } catch (e) { + return { or: prepareDir }; + } + } + + return { + or: prepareDir, + result: (this ? this.result : false) || dirPath + }; +} + +function mkDir(dirPath, root) { + var dirs = dirPath.split(path.sep); + var dir = dirs.shift(); + root = (root || '') + dir + path.sep; + + try { + fs.mkdirSync(root); + } catch (e) { + if (!fs.statSync(root).isDirectory()) { + throw new Error(e); + } + } + + return !dirs.length || mkDir(dirs.join(path.sep), root); +} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/get-app-name.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/get-app-name.js new file mode 100644 index 00000000000..213ae49bcf8 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/get-app-name.js @@ -0,0 +1,91 @@ +// jshint -W074 +'use strict'; + +/** @name process.resourcesPath */ + +var fs = require('fs'); +var path = require('path'); +var consoleTransport = require('../console'); + +module.exports = getAppName; + +function getAppName() { + try { + var name = loadPackageName(); + if (name) { + return name; + } + return warn('electron-log: unable to load the app name from package.json'); + } catch (e) { + return warn('electron-log: ' + e.message); + } +} + +/** + * Try to load main app package + * @throws {Error} + * @return {Object|null} + */ +function loadPackageName() { + var packageFile; + + try { + if (require.main.filename) { + packageFile = find(path.dirname(require.main.filename)); + } + } catch (e) {} + + if (!packageFile && process.resourcesPath) { + packageFile = find(path.join(process.resourcesPath, 'app.asar')); + var electronModule = path.join('node_modules', 'electron', 'package.json'); + if (packageFile && packageFile.indexOf(electronModule) !== -1) { + packageFile = null; + } + } + + if (!packageFile) { + packageFile = find(process.cwd()); + } + + if (!packageFile) { + return null; + } + + var content = fs.readFileSync(packageFile, 'utf-8'); + var packageData = JSON.parse(content); + + //noinspection JSUnresolvedVariable + return packageData ? packageData.productName || packageData.name : false; +} + +function find(root) { + var file; + + while (!file) { + var parent; + file = path.join(root, 'package.json'); + + try { + fs.statSync(file); + } catch (e) { + parent = path.resolve(root, '..'); + file = null; + } + + if (root === parent) { + break; + } + + root = parent; + } + + return file; +} + +function warn(message) { + consoleTransport({ + data: [message], + date: new Date(), + level: 'warn' + }); +} \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/index.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/index.js new file mode 100644 index 00000000000..94fa9f88219 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/index.js @@ -0,0 +1,96 @@ +'use strict'; + +var fs = require('fs'); +var EOL = require('os').EOL; +var format = require('../../format'); +var consoleTransport = require('../console'); +var findLogPath = require('./find-log-path'); + +transport.findLogPath = findLogPath; +transport.format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text}'; +transport.level = 'warn'; +transport.maxSize = 1024 * 1024; +transport.streamConfig = undefined; + +module.exports = transport; + +function transport(msg) { + var text = format.format(msg, transport.format) + EOL; + + if (transport.stream === undefined) { + initSteamConfig(); + openStream(); + } + + if (transport.level === false) { + return; + } + + var needLogRotation = transport.maxSize > 0 && + getStreamSize(transport.stream) > transport.maxSize; + + if (needLogRotation) { + archiveLog(transport.stream); + openStream(); + } + + transport.stream.write(text); +} + +function initSteamConfig() { + transport.file = transport.file || findLogPath(transport.appName); + + if (!transport.file) { + transport.level = false; + logConsole('Could not set a log file'); + } +} + +function openStream() { + if (transport.level === false) { + return; + } + + transport.stream = fs.createWriteStream( + transport.file, + transport.streamConfig || { flags: 'a' } + ); +} + +function getStreamSize(stream) { + if (!stream) { + return 0; + } + + if (stream.logSizeAtStart === undefined) { + try { + stream.logSizeAtStart = fs.statSync(stream.path).size; + } catch (e) { + stream.logSizeAtStart = 0; + } + } + + return stream.logSizeAtStart + stream.bytesWritten; +} + +function archiveLog(stream) { + if (stream.end) { + stream.end(); + } + + try { + fs.renameSync(stream.path, stream.path.replace(/log$/, 'old.log')); + } catch (e) { + logConsole('Could not rotate log', e); + } +} + +function logConsole(message, error) { + var data = ['electron-log.transports.file: ' + message]; + + if (error) { + data.push(error); + } + + consoleTransport({ data: data, date: new Date(), level: 'warn' }); +} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/log-s.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/log-s.js new file mode 100644 index 00000000000..e7b1d49dd5f --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/log-s.js @@ -0,0 +1,86 @@ +// jshint -W074, -W089 +'use strict'; + +var http = require('http'); +var https = require('https'); +var url = require('url'); + +transport.client = { name: 'electron-application' }; +transport.depth = 6; +transport.level = false; +transport.url = null; + +module.exports = transport; + +function transport(msg) { + if (!transport.url) return; + + var data = jsonDepth({ + client: transport.client, + data: msg.data, + date: msg.date.getTime(), + level: msg.level + }, transport.depth + 1); + + post(transport.url, data); +} + +function post(serverUrl, data) { + var urlObject = url.parse(serverUrl); + var transport = urlObject.protocol === 'https:' ? https : http; + + var body = JSON.stringify(data); + + var options = { + hostname: urlObject.hostname, + port: urlObject.port, + path: urlObject.path, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': body.length + } + }; + + var request = transport.request(options); + request.write(body); + request.end(); +} + +function jsonDepth(json, depth) { + if (depth < 1) { + if (Array.isArray(json)) return '[array]'; + if (typeof json === 'object') return '[object]'; + return json; + } + + if (Array.isArray(json)) { + return json.map(function(child) { + return jsonDepth(child, depth - 1); + }); + } + + if (json && typeof json.getMonth === 'function') { + return json; + } + + if (json === null) { + return null; + } + + if (typeof json === 'object') { + if (typeof json.toJSON === 'function') { + json = json.toJSON(); + } + + var newJson = {}; + for (var i in json) { + //noinspection JSUnfilteredForInLoop + newJson[i] = jsonDepth(json[i], depth - 1); + } + + return newJson; + } + + return json; +} \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/renderer-console.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/renderer-console.js new file mode 100644 index 00000000000..a50f09990fa --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/renderer-console.js @@ -0,0 +1,24 @@ +'use strict'; + +var BrowserWindow; +try { + BrowserWindow = require('electron').BrowserWindow; +} catch (e) { + BrowserWindow = null; +} + +var format = require('../format'); + +transport.level = BrowserWindow ? 'silly' : false; +transport.format = '[{h}:{i}:{s}.{ms}] {text}'; + +module.exports = transport; + +function transport(msg) { + if (!BrowserWindow) return; + + var text = format.format(msg, transport.format); + BrowserWindow.getAllWindows().forEach(function(wnd) { + wnd.webContents.send('__ELECTRON_LOG_RENDERER__', msg.level, text); + }); +} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/main.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/main.js new file mode 100644 index 00000000000..bf4181d59d4 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/main.js @@ -0,0 +1,50 @@ +'use strict'; + +var electron; +try { + electron = require('electron'); +} catch (e) { + electron = null; +} + +var log = require('./lib/log'); +var transportConsole = require('./lib/transports/console'); +var transportFile = require('./lib/transports/file'); +var transportLogS = require('./lib/transports/log-s'); +var transportRendererConsole = require('./lib/transports/renderer-console'); + +var transports = { + console: transportConsole, + file: transportFile, + logS: transportLogS, + rendererConsole: transportRendererConsole +}; + +module.exports = { + transports: transports, + + error: log.bind(null, transports, 'error'), + warn: log.bind(null, transports, 'warn'), + info: log.bind(null, transports, 'info'), + verbose: log.bind(null, transports, 'verbose'), + debug: log.bind(null, transports, 'debug'), + silly: log.bind(null, transports, 'silly'), + log: log.bind(null, transports, 'info') +}; + +module.exports.default = module.exports; + +if (electron && electron.ipcMain) { + electron.ipcMain.on('__ELECTRON_LOG__', onRendererLog); + var appName = electron.app.getName(); + if (appName !== 'Electron') { + transportFile.appName = appName; + } +} + +function onRendererLog(event, data) { + if (Array.isArray(data)) { + data.unshift(transports); + log.apply(null, data); + } +} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/package.json b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/package.json new file mode 100644 index 00000000000..6d62dde372b --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/package.json @@ -0,0 +1,56 @@ +{ + "name": "electron-log", + "version": "2.2.9", + "description": "Just a very simple logging module for your Electron application", + "main": "./index.js", + "scripts": { + "test": "npm run jshint && npm run jscs && npm run tslint && npm run mocha && npm run test-projects", + "mocha": "mocha index.spec.js lib/{,**/}{,**/}*.spec.js", + "test-projects": "mocha test-projects/**/*.spec.js", + "test-projects-install": "node test-projects/install.js", + "jscs": "jscs .", + "jshint": "jshint --exclude ./node_modules,./test-projects . --verbose", + "tslint": "tslint electron-log.d.ts" + }, + "typings": "./electron-log.d.ts", + "repository": { + "type": "git", + "url": "git+https://github.com/megahertz/electron-log.git" + }, + "files": [ + "index.js", + "main.js", + "renderer.js", + "lib/**/*.js", + "!lib/**/*.spec.js", + "electron-log.d.ts" + ], + "keywords": [ + "electron", + "atom", + "log", + "logger", + "logging", + "windows", + "mac", + "osx", + "linux", + "desktop" + ], + "author": "Alexey Prokhorov", + "license": "MIT", + "bugs": { + "url": "https://github.com/megahertz/electron-log/issues" + }, + "homepage": "https://github.com/megahertz/electron-log#readme", + "devDependencies": { + "chai": "*", + "jscs": "*", + "jshint": "*", + "jshint-reporter-jscs": "*", + "mocha": "*", + "rewire": "*", + "tslint": "*", + "typescript": "*" + } +} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/renderer.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/renderer.js new file mode 100644 index 00000000000..12f55f4378b --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/renderer.js @@ -0,0 +1,48 @@ +'use strict'; + +module.exports = null; + +var ipcRenderer; +try { + ipcRenderer = require('electron').ipcRenderer; +} catch (e) { + ipcRenderer = null; +} + +if (ipcRenderer) { + module.exports = { + error: log.bind(null, 'error'), + warn: log.bind(null, 'warn'), + info: log.bind(null, 'info'), + verbose: log.bind(null, 'verbose'), + debug: log.bind(null, 'debug'), + silly: log.bind(null, 'silly'), + log: log.bind(null, 'info') + }; + + module.exports.default = module.exports; + + ipcRenderer.on('__ELECTRON_LOG_RENDERER__', function(event, level, text) { + if (level === 'verbose') { + level = 'log'; + } else if (level === 'silly') { + level = 'debug'; + } + + console[level](text); + }); +} + +function log() { + var data = Array.prototype.slice.call(arguments); + + data = data.map(function(obj) { + if (obj instanceof Error) { + obj = obj.stack || obj; + } + + return obj; + }); + + ipcRenderer.send('__ELECTRON_LOG__', data); +} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/package.json b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/package.json new file mode 100644 index 00000000000..d762448ba8a --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/package.json @@ -0,0 +1,25 @@ +{ + "name": "test-app", + "productName": "Test App ßW", + "version": "1.1.0", + "homepage": "http://foo.example.com", + "description": "Test Application (test quite \" #378)", + "author": "Foo Bar ", + "license": "MIT", + "build": { + "electronVersion": "23.3.10", + "appId": "org.electron-builder.testApp", + "compression": "store", + "npmRebuild": false, + "mac": { + "category": "your.app.category.type" + }, + "linux": { + "category": "Development" + } + }, + "dependencies": { + "ms": "2.0.0", + "electron-log": "2.2.9" + } +} From 257b603118569d10c6dacad5b6c48e83e1f06ac4 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 22:35:54 +0800 Subject: [PATCH 09/85] update ut --- .../node_modules/.yarn-integrity | 12 +- .../node_modules/ms/index.js | 152 ++++++++++++++++++ .../node_modules/ms/license.md | 21 +++ .../node_modules/ms/package.json | 37 +++++ .../node_modules/ms/readme.md | 51 ++++++ .../node_modules/test-app | 1 - .../node_modules/test-app/index.html | 25 +++ .../node_modules/test-app/index.js | 77 +++++++++ .../node_modules/test-app/package.json | 28 ++++ .../test-app-yarn-workspace/yarn.lock | 5 + 10 files changed, 401 insertions(+), 8 deletions(-) create mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/ms/index.js create mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/ms/license.md create mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/ms/package.json create mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/ms/readme.md delete mode 120000 test/fixtures/test-app-yarn-workspace/node_modules/test-app create mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.html create mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.js create mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity b/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity index 77763fc1a14..951419b954a 100644 --- a/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity +++ b/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity @@ -1,24 +1,22 @@ { - "systemParams": "darwin-x64-64", + "systemParams": "win32-x64-115", "modulesFolders": [ "node_modules", "node_modules" ], "flags": [], - "linkedModules": [ - "docdash", - "electron-download-tf", - "electron-webpack" - ], + "linkedModules": [], "topLevelPatterns": [ "@sentry/core@0.5.4", "electron-log@2.2.9", + "ms@2.0.0", "test-app@1.1.0" ], "lockfileEntries": { "@sentry/core@0.5.4": "https://registry.yarnpkg.com/@sentry/core/-/core-0.5.4.tgz#9b0a842b442131b3801bae70be2ca4e9c510574e", "@sentry/shim@0.5.4": "https://registry.yarnpkg.com/@sentry/shim/-/shim-0.5.4.tgz#cb826b1a34765ae5e1b21e61df2def2f8da91dc1", - "electron-log@2.2.9": "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" + "electron-log@2.2.9": "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf", + "ms@2.0.0": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" }, "files": [], "artifacts": {} diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/ms/index.js b/test/fixtures/test-app-yarn-workspace/node_modules/ms/index.js new file mode 100644 index 00000000000..6a522b16b3a --- /dev/null +++ b/test/fixtures/test-app-yarn-workspace/node_modules/ms/index.js @@ -0,0 +1,152 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + if (ms >= d) { + return Math.round(ms / d) + 'd'; + } + if (ms >= h) { + return Math.round(ms / h) + 'h'; + } + if (ms >= m) { + return Math.round(ms / m) + 'm'; + } + if (ms >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + ' ' + name; + } + return Math.ceil(ms / n) + ' ' + name + 's'; +} diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/ms/license.md b/test/fixtures/test-app-yarn-workspace/node_modules/ms/license.md new file mode 100644 index 00000000000..69b61253a38 --- /dev/null +++ b/test/fixtures/test-app-yarn-workspace/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/ms/package.json b/test/fixtures/test-app-yarn-workspace/node_modules/ms/package.json new file mode 100644 index 00000000000..6a31c81fac4 --- /dev/null +++ b/test/fixtures/test-app-yarn-workspace/node_modules/ms/package.json @@ -0,0 +1,37 @@ +{ + "name": "ms", + "version": "2.0.0", + "description": "Tiny milisecond conversion utility", + "repository": "zeit/ms", + "main": "./index", + "files": [ + "index.js" + ], + "scripts": { + "precommit": "lint-staged", + "lint": "eslint lib/* bin/*", + "test": "mocha tests.js" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "license": "MIT", + "devDependencies": { + "eslint": "3.19.0", + "expect.js": "0.3.1", + "husky": "0.13.3", + "lint-staged": "3.4.1", + "mocha": "3.4.1" + } +} diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/ms/readme.md b/test/fixtures/test-app-yarn-workspace/node_modules/ms/readme.md new file mode 100644 index 00000000000..84a9974cccd --- /dev/null +++ b/test/fixtures/test-app-yarn-workspace/node_modules/ms/readme.md @@ -0,0 +1,51 @@ +# ms + +[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) +[![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +``` + +### Convert from milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(ms('10 hours')) // "10h" +``` + +### Time format written-out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [node](https://nodejs.org) and in the browser. +- If a number is supplied to `ms`, a string with a unit is returned. +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`). +- If you pass a string with a number and a valid unit, the number of equivalent ms is returned. + +## Caught a bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app b/test/fixtures/test-app-yarn-workspace/node_modules/test-app deleted file mode 120000 index 6d4c4c138ca..00000000000 --- a/test/fixtures/test-app-yarn-workspace/node_modules/test-app +++ /dev/null @@ -1 +0,0 @@ -../packages/test-app \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.html b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.html new file mode 100644 index 00000000000..a25b3367d5e --- /dev/null +++ b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.html @@ -0,0 +1,25 @@ + + + + + Hello World! + + + +

Hello World!

+ We are using node , + Chrome , + and Electron . + + Args: . + + Env: . + + + + diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.js b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.js new file mode 100644 index 00000000000..c7e706aa9db --- /dev/null +++ b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.js @@ -0,0 +1,77 @@ +'use strict' + +const { app, ipcMain, BrowserWindow, Menu, Tray } = require("electron") +const fs = require("fs") +const path = require("path") + +// Module to control application life. +// Module to create native browser window. + +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +let mainWindow; + +let tray = null + +function createWindow () { + if (process.platform === "linux" && process.env.APPDIR != null) { + tray = new Tray(path.join(process.env.APPDIR, "testapp.png")) + const contextMenu = Menu.buildFromTemplate([ + {label: 'Item1', type: 'radio'}, + {label: 'Item2', type: 'radio'}, + {label: 'Item3', type: 'radio', checked: true}, + {label: 'Item4', type: 'radio'} + ]) + tray.setToolTip('This is my application.') + tray.setContextMenu(contextMenu) + } + + // Create the browser window. + mainWindow = new BrowserWindow({width: 800, height: 600}); + + // and load the index.html of the app. + mainWindow.loadURL('file://' + __dirname + '/index.html'); + + // Open the DevTools. + mainWindow.webContents.openDevTools(); + + mainWindow.webContents.executeJavaScript(`console.log("appData: ${app.getPath("appData").replace(/\\/g, "\\\\")}")`) + mainWindow.webContents.executeJavaScript(`console.log("userData: ${app.getPath("userData").replace(/\\/g, "\\\\")}")`) + + // Emitted when the window is closed. + mainWindow.on('closed', function() { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null; + }); +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +app.on('ready', createWindow); + +// Quit when all windows are closed. +app.on('window-all-closed', function () { + // On MacOS it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +app.on("activate", function () { + if (mainWindow === null) { + createWindow() + } +}) + +ipcMain.on("saveAppData", () => { + try { + // electron doesn't escape / in the product name + fs.writeFileSync(path.join(app.getPath("appData"), "Test App ßW", "testFile"), "test") + } + catch (e) { + mainWindow.webContents.executeJavaScript(`console.log(\`userData: ${e}\`)`) + } +}) \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json new file mode 100644 index 00000000000..24e32dfbe74 --- /dev/null +++ b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json @@ -0,0 +1,28 @@ +{ + "name": "test-app", + "productName": "Test App ßW", + "version": "1.1.0", + "homepage": "http://foo.example.com", + "description": "Test Application (test quite \" #378)", + "author": "Foo Bar ", + "license": "MIT", + "build": { + "electronVersion": "23.3.10", + "appId": "org.electron-builder.testApp", + "compression": "store", + "npmRebuild": false, + "mac": { + "category": "your.app.category.type" + }, + "linux": { + "category": "Development" + } + }, + "dependencies": { + "electron-log": "2.2.9", + "@sentry/core": "0.5.4" + }, + "optionalDependencies": { + "ms": "2.0.0" + } +} diff --git a/test/fixtures/test-app-yarn-workspace/yarn.lock b/test/fixtures/test-app-yarn-workspace/yarn.lock index adac830142b..e5486c614e4 100644 --- a/test/fixtures/test-app-yarn-workspace/yarn.lock +++ b/test/fixtures/test-app-yarn-workspace/yarn.lock @@ -15,3 +15,8 @@ electron-log@2.2.9: version "2.2.9" resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== From 601bef9dceb64a0370d567631d4793fbca5805f0 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 00:32:08 +0800 Subject: [PATCH 10/85] update node modules collector --- packages/app-builder-lib/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/app-builder-lib/package.json b/packages/app-builder-lib/package.json index a276eb61772..a99ec370643 100644 --- a/packages/app-builder-lib/package.json +++ b/packages/app-builder-lib/package.json @@ -78,7 +78,7 @@ "semver": "^7.3.8", "tar": "^6.1.12", "temp-file": "^3.4.0", - "node-module-collector": "1.1.0" + "node-module-collector": "1.1.1" }, "///": "babel in devDependencies for proton tests", "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95bb6c22b94..80b2cc17888 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,8 +162,8 @@ importers: specifier: ^10.0.0 version: 10.0.1 node-module-collector: - specifier: 1.1.0 - version: 1.1.0 + specifier: 1.1.1 + version: 1.1.1 resedit: specifier: ^1.7.0 version: 1.7.1 @@ -4931,8 +4931,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-module-collector@1.1.0: - resolution: {integrity: sha512-n7lb6sr0uHk3RFOaIIk9LDclkMd7p/0RSpz2F3956Vmgx/vqy3EfNfFOJU+jblbZuBdqwcDsEK0ZzpHYhtV4jw==} + node-module-collector@1.1.1: + resolution: {integrity: sha512-iebJ9xY3LY9nuf6GPIJSlLQaXEyDXiRYgXs0Oo2CXUgXY7glRWA9HDg4p5L3FUVZ7cpymyBdUGAgf0u6gHdcGQ==} node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -11985,7 +11985,7 @@ snapshots: node-int64@0.4.0: {} - node-module-collector@1.1.0: {} + node-module-collector@1.1.1: {} node-releases@2.0.14: {} From 2b051a0df316c88cf952e3d12ace7b10102410e3 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 00:56:22 +0800 Subject: [PATCH 11/85] fix ut --- .gitignore | 2 +- .../test-app-yarn-workspace/yarn.lock | 47 ++++++++++--------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 00536b5579d..e93d9c63a64 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /.vscode/ node_modules +**/node_modules *.log /.idea/compiler.xml @@ -27,4 +28,3 @@ electron-builder-*.d.ts tsconfig.tsbuildinfo .pnpm-store/ -**/node_modules diff --git a/test/fixtures/test-app-yarn-workspace/yarn.lock b/test/fixtures/test-app-yarn-workspace/yarn.lock index e5486c614e4..5a64a2dc9f6 100644 --- a/test/fixtures/test-app-yarn-workspace/yarn.lock +++ b/test/fixtures/test-app-yarn-workspace/yarn.lock @@ -1,22 +1,25 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@sentry/core@0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-0.5.4.tgz#9b0a842b442131b3801bae70be2ca4e9c510574e" - dependencies: - "@sentry/shim" "0.5.4" - -"@sentry/shim@0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@sentry/shim/-/shim-0.5.4.tgz#cb826b1a34765ae5e1b21e61df2def2f8da91dc1" - -electron-log@2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@sentry/core@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-0.5.4.tgz#9b0a842b442131b3801bae70be2ca4e9c510574e" + integrity sha512-2OPFVkgpv0HmYnUTmgF6IxLvslqn7fYCEBWRn/Owa5ICx2+peWQ8D5VQSTpgYsRwC2HQLEndhz+TwvkrnB2SKA== + dependencies: + "@sentry/shim" "0.5.4" + +"@sentry/shim@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@sentry/shim/-/shim-0.5.4.tgz#cb826b1a34765ae5e1b21e61df2def2f8da91dc1" + integrity sha512-UoExifJnbmTiUgc1ClH34/UvPxp68wT1OQBuAUTm/hVdhNyp81TjsrxnJenq5YDTAVEzgjjREi0aiA7Hl946mg== + +electron-log@2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" + integrity sha512-WNMSipQYurNxY14RO6IKgcxcZg1e4aNVpUUJK9q7Bqe0TZEKn1e5h4HiQKhTgVLqKrUn++ugOZrty450P9vpjA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== From b0ef6518e18a04749fd8151c40c437b5ce438853 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 01:03:30 +0800 Subject: [PATCH 12/85] update gitinore --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index e93d9c63a64..d3b7700a25f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /.vscode/ -node_modules -**/node_modules +node_modules/ +**/node_modules/ + *.log /.idea/compiler.xml From c9c40712100606c43de5cf92ebbc06c8e1446d58 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 01:05:37 +0800 Subject: [PATCH 13/85] update --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d3b7700a25f..738ff6ade89 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /.vscode/ node_modules/ **/node_modules/ +test/fixtures/test-app-two-native-modules/node_modules/ *.log From 352f08e3008814a6b81fbc9d742967f898cc17e4 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 01:07:26 +0800 Subject: [PATCH 14/85] update yarn.lock --- .gitignore | 5 +- .../test-app-two-native-modules/yarn.lock | 1002 +++++++++-------- 2 files changed, 518 insertions(+), 489 deletions(-) diff --git a/.gitignore b/.gitignore index 738ff6ade89..fdd72283d2f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ /.vscode/ -node_modules/ -**/node_modules/ -test/fixtures/test-app-two-native-modules/node_modules/ +node_modules +**/node_modules *.log diff --git a/test/fixtures/test-app-two-native-modules/yarn.lock b/test/fixtures/test-app-two-native-modules/yarn.lock index 5aff61f57d4..bd5fcbebd26 100644 --- a/test/fixtures/test-app-two-native-modules/yarn.lock +++ b/test/fixtures/test-app-two-native-modules/yarn.lock @@ -1,486 +1,516 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@electron/get@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" - integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== - dependencies: - debug "^4.1.1" - env-paths "^2.2.0" - fs-extra "^8.1.0" - got "^11.8.5" - progress "^2.0.3" - semver "^6.2.0" - sumchecker "^3.0.1" - optionalDependencies: - global-agent "^3.0.0" - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "18.15.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" - integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== - -"@types/node@^16.11.26": - version "16.18.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.22.tgz#a6505a5da1387aae03fddfb93591118f27b4c0ea" - integrity sha512-LJSIirgASa1LicFGTUFwDY7BfKDtLIbijqDLkH47LxEo/jtdrtiZ4/kLPD99bEQhTcPcuh6KhDllHqRxygJD2w== - -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - -boolean@^3.0.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" - integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -debug@^4.1.0, debug@^4.1.1: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-properties@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -electron@23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/electron/-/electron-23.2.0.tgz#1c60fec08206e24830f3a8dca2772454c8bc25ba" - integrity sha512-De9e21cri0QYct/w6tTNOnKyCt9RVKUw5F8PEN4FPzGR9tr6IT53uyt42uH754uJWrZeLMCAdoXy6/0GmMmYZA== - dependencies: - "@electron/get" "^2.0.0" - "@types/node" "^16.11.26" - extract-zip "^2.0.1" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -es6-error@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-intrinsic@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -global-agent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" - integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== - dependencies: - boolean "^3.0.1" - es6-error "^4.1.1" - matcher "^3.0.0" - roarr "^2.15.3" - semver "^7.3.2" - serialize-error "^7.0.1" - -globalthis@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -matcher@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" - integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== - dependencies: - escape-string-regexp "^4.0.0" - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -roarr@^2.15.3: - version "2.15.4" - resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" - integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== - dependencies: - boolean "^3.0.1" - detect-node "^2.0.4" - globalthis "^1.0.1" - json-stringify-safe "^5.0.1" - semver-compare "^1.0.0" - sprintf-js "^1.1.2" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== - -semver@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.2: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -sprintf-js@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sumchecker@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" - integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== - dependencies: - debug "^4.1.0" - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@electron/get@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960" + integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "22.7.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.4.tgz#e35d6f48dca3255ce44256ddc05dee1c23353fcc" + integrity sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg== + dependencies: + undici-types "~6.19.2" + +"@types/node@^16.11.26": + version "16.18.112" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.112.tgz#efd468e4edd08404eed23b6aed6c2f35edfa9450" + integrity sha512-EKrbKUGJROm17+dY/gMi31aJlGLJ75e1IkTojt9n6u+hnaTBDs+M1bIdOawpk2m6YUAXq/R2W0SxCng1tndHCg== + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-data-property@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +electron@23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-23.2.0.tgz#1c60fec08206e24830f3a8dca2772454c8bc25ba" + integrity sha512-De9e21cri0QYct/w6tTNOnKyCt9RVKUw5F8PEN4FPzGR9tr6IT53uyt42uH754uJWrZeLMCAdoXy6/0GmMmYZA== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^16.11.26" + extract-zip "^2.0.1" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +globalthis@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-property-descriptors@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^4.0.0: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver@^6.2.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +sprintf-js@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" From f7d91c69c1f88aecda9710abd78af80905775a1b Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 01:10:58 +0800 Subject: [PATCH 15/85] update gitinogre --- test/fixtures/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/test/fixtures/.gitignore b/test/fixtures/.gitignore index 9bfb325f109..e69de29bb2d 100644 --- a/test/fixtures/.gitignore +++ b/test/fixtures/.gitignore @@ -1 +0,0 @@ -!node_modules/ \ No newline at end of file From 2453a1501c61a5dc97311cf82b48bf46e52a8537 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 01:13:05 +0800 Subject: [PATCH 16/85] fix ut --- .../test-app-yarn-several-workspace/yarn.lock | 33 ++-- .../node_modules/.yarn-integrity | 4 +- .../node_modules/ms/index.js | 152 ------------------ .../node_modules/ms/license.md | 21 --- .../node_modules/ms/package.json | 37 ----- .../node_modules/ms/readme.md | 51 ------ .../node_modules/test-app/package.json | 3 - .../packages/test-app/package.json | 3 - .../test-app-yarn-workspace/yarn.lock | 5 - 9 files changed, 19 insertions(+), 290 deletions(-) delete mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/ms/index.js delete mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/ms/license.md delete mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/ms/package.json delete mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/ms/readme.md diff --git a/test/fixtures/test-app-yarn-several-workspace/yarn.lock b/test/fixtures/test-app-yarn-several-workspace/yarn.lock index 7732df68af9..bebfa96286f 100644 --- a/test/fixtures/test-app-yarn-several-workspace/yarn.lock +++ b/test/fixtures/test-app-yarn-several-workspace/yarn.lock @@ -1,15 +1,18 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -electron-log@2.2.8: - version "2.2.8" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.8.tgz#2296cccd8da046268a199c1a302dcb8cb16f2b72" - -electron-log@2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +electron-log@2.2.8: + version "2.2.8" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.8.tgz#2296cccd8da046268a199c1a302dcb8cb16f2b72" + integrity sha512-jYdSZLKo2IcAW7q4MmdzSdFfxZwGUv0UH4IK9ueeY0jdLqP3zyia7JwVpoYzsmx0vPQI1Mj6PaaflAuZC4p75w== + +electron-log@2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" + integrity sha512-WNMSipQYurNxY14RO6IKgcxcZg1e4aNVpUUJK9q7Bqe0TZEKn1e5h4HiQKhTgVLqKrUn++ugOZrty450P9vpjA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity b/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity index 951419b954a..c5925435c1c 100644 --- a/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity +++ b/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity @@ -9,14 +9,12 @@ "topLevelPatterns": [ "@sentry/core@0.5.4", "electron-log@2.2.9", - "ms@2.0.0", "test-app@1.1.0" ], "lockfileEntries": { "@sentry/core@0.5.4": "https://registry.yarnpkg.com/@sentry/core/-/core-0.5.4.tgz#9b0a842b442131b3801bae70be2ca4e9c510574e", "@sentry/shim@0.5.4": "https://registry.yarnpkg.com/@sentry/shim/-/shim-0.5.4.tgz#cb826b1a34765ae5e1b21e61df2def2f8da91dc1", - "electron-log@2.2.9": "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf", - "ms@2.0.0": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + "electron-log@2.2.9": "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" }, "files": [], "artifacts": {} diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/ms/index.js b/test/fixtures/test-app-yarn-workspace/node_modules/ms/index.js deleted file mode 100644 index 6a522b16b3a..00000000000 --- a/test/fixtures/test-app-yarn-workspace/node_modules/ms/index.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isNaN(val) === false) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - if (ms >= d) { - return Math.round(ms / d) + 'd'; - } - if (ms >= h) { - return Math.round(ms / h) + 'h'; - } - if (ms >= m) { - return Math.round(ms / m) + 'm'; - } - if (ms >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - return plural(ms, d, 'day') || - plural(ms, h, 'hour') || - plural(ms, m, 'minute') || - plural(ms, s, 'second') || - ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) { - return; - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + ' ' + name; - } - return Math.ceil(ms / n) + ' ' + name + 's'; -} diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/ms/license.md b/test/fixtures/test-app-yarn-workspace/node_modules/ms/license.md deleted file mode 100644 index 69b61253a38..00000000000 --- a/test/fixtures/test-app-yarn-workspace/node_modules/ms/license.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/ms/package.json b/test/fixtures/test-app-yarn-workspace/node_modules/ms/package.json deleted file mode 100644 index 6a31c81fac4..00000000000 --- a/test/fixtures/test-app-yarn-workspace/node_modules/ms/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "ms", - "version": "2.0.0", - "description": "Tiny milisecond conversion utility", - "repository": "zeit/ms", - "main": "./index", - "files": [ - "index.js" - ], - "scripts": { - "precommit": "lint-staged", - "lint": "eslint lib/* bin/*", - "test": "mocha tests.js" - }, - "eslintConfig": { - "extends": "eslint:recommended", - "env": { - "node": true, - "es6": true - } - }, - "lint-staged": { - "*.js": [ - "npm run lint", - "prettier --single-quote --write", - "git add" - ] - }, - "license": "MIT", - "devDependencies": { - "eslint": "3.19.0", - "expect.js": "0.3.1", - "husky": "0.13.3", - "lint-staged": "3.4.1", - "mocha": "3.4.1" - } -} diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/ms/readme.md b/test/fixtures/test-app-yarn-workspace/node_modules/ms/readme.md deleted file mode 100644 index 84a9974cccd..00000000000 --- a/test/fixtures/test-app-yarn-workspace/node_modules/ms/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# ms - -[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) -[![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -``` - -### Convert from milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(ms('10 hours')) // "10h" -``` - -### Time format written-out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [node](https://nodejs.org) and in the browser. -- If a number is supplied to `ms`, a string with a unit is returned. -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`). -- If you pass a string with a number and a valid unit, the number of equivalent ms is returned. - -## Caught a bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json index 24e32dfbe74..82f146450f6 100644 --- a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json +++ b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json @@ -21,8 +21,5 @@ "dependencies": { "electron-log": "2.2.9", "@sentry/core": "0.5.4" - }, - "optionalDependencies": { - "ms": "2.0.0" } } diff --git a/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json b/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json index 24e32dfbe74..82f146450f6 100644 --- a/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json +++ b/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json @@ -21,8 +21,5 @@ "dependencies": { "electron-log": "2.2.9", "@sentry/core": "0.5.4" - }, - "optionalDependencies": { - "ms": "2.0.0" } } diff --git a/test/fixtures/test-app-yarn-workspace/yarn.lock b/test/fixtures/test-app-yarn-workspace/yarn.lock index 5a64a2dc9f6..fb7039fbde8 100644 --- a/test/fixtures/test-app-yarn-workspace/yarn.lock +++ b/test/fixtures/test-app-yarn-workspace/yarn.lock @@ -18,8 +18,3 @@ electron-log@2.2.9: version "2.2.9" resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" integrity sha512-WNMSipQYurNxY14RO6IKgcxcZg1e4aNVpUUJK9q7Bqe0TZEKn1e5h4HiQKhTgVLqKrUn++ugOZrty450P9vpjA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== From 6823a87c4e1eaca748b617a7fd36a2bce944cd8e Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 01:13:49 +0800 Subject: [PATCH 17/85] update --- packages/app-builder-lib/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/app-builder-lib/package.json b/packages/app-builder-lib/package.json index a99ec370643..dae01fa4040 100644 --- a/packages/app-builder-lib/package.json +++ b/packages/app-builder-lib/package.json @@ -78,7 +78,7 @@ "semver": "^7.3.8", "tar": "^6.1.12", "temp-file": "^3.4.0", - "node-module-collector": "1.1.1" + "node-module-collector": "1.1.2" }, "///": "babel in devDependencies for proton tests", "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80b2cc17888..01488c75e4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,8 +162,8 @@ importers: specifier: ^10.0.0 version: 10.0.1 node-module-collector: - specifier: 1.1.1 - version: 1.1.1 + specifier: 1.1.2 + version: 1.1.2 resedit: specifier: ^1.7.0 version: 1.7.1 @@ -4931,8 +4931,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-module-collector@1.1.1: - resolution: {integrity: sha512-iebJ9xY3LY9nuf6GPIJSlLQaXEyDXiRYgXs0Oo2CXUgXY7glRWA9HDg4p5L3FUVZ7cpymyBdUGAgf0u6gHdcGQ==} + node-module-collector@1.1.2: + resolution: {integrity: sha512-GEUmt3SlSWCT6FWv+Pz7gHNU+HrhN+Rd08SeINUP2vJRmGkK72AoUqvgl9kvmSiLdBOleL2nzicjMQpWS+4ZPQ==} node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -11985,7 +11985,7 @@ snapshots: node-int64@0.4.0: {} - node-module-collector@1.1.1: {} + node-module-collector@1.1.2: {} node-releases@2.0.14: {} From aafd1be757b79439261b9cc96f324104e2a56c53 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 01:18:33 +0800 Subject: [PATCH 18/85] fix ut --- test/snapshots/HoistedNodeModuleTest.js.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index 2f052a031fd..b70db7833c0 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -1387,7 +1387,7 @@ Object { }, "package.json": Object { "offset": "140652", - "size": 380, + "size": 320, }, }, } From 59aa878553e3fbd3967340629c25f0b094437220 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 4 Oct 2024 13:30:07 -0400 Subject: [PATCH 19/85] fix ut --- test/fixtures/.gitignore | 1 + .../node_modules/.yarn-integrity | 4 +- .../node_modules/foo | 1 + .../node_modules/foo/package.json | 10 -- .../node_modules/test-app | 1 + .../node_modules/test-app/index.html | 25 --- .../node_modules/test-app/index.js | 77 --------- .../node_modules/electron-log/LICENSE | 21 --- .../node_modules/electron-log/README.md | 163 ------------------ .../electron-log/electron-log.d.ts | 60 ------- .../node_modules/electron-log/index.js | 7 - .../node_modules/electron-log/lib/format.js | 41 ----- .../node_modules/electron-log/lib/log.js | 42 ----- .../electron-log/lib/transports/console.js | 18 -- .../lib/transports/file/find-log-path.js | 96 ----------- .../lib/transports/file/get-app-name.js | 91 ---------- .../electron-log/lib/transports/file/index.js | 96 ----------- .../electron-log/lib/transports/log-s.js | 86 --------- .../lib/transports/renderer-console.js | 24 --- .../node_modules/electron-log/main.js | 50 ------ .../node_modules/electron-log/package.json | 56 ------ .../node_modules/electron-log/renderer.js | 48 ------ .../node_modules/test-app/package.json | 25 --- .../node_modules/.yarn-integrity | 2 +- .../node_modules/test-app | 1 + .../node_modules/test-app/index.html | 25 --- .../node_modules/test-app/index.js | 77 --------- .../node_modules/test-app/package.json | 25 --- 28 files changed, 7 insertions(+), 1166 deletions(-) create mode 120000 test/fixtures/test-app-yarn-several-workspace/node_modules/foo delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/foo/package.json create mode 120000 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.html delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/LICENSE delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/README.md delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/electron-log.d.ts delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/index.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/format.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/log.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/console.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/find-log-path.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/get-app-name.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/index.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/log-s.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/renderer-console.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/main.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/package.json delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/renderer.js delete mode 100644 test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/package.json create mode 120000 test/fixtures/test-app-yarn-workspace/node_modules/test-app delete mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.html delete mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.js delete mode 100644 test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json diff --git a/test/fixtures/.gitignore b/test/fixtures/.gitignore index e69de29bb2d..ddf342489be 100644 --- a/test/fixtures/.gitignore +++ b/test/fixtures/.gitignore @@ -0,0 +1 @@ +!node_modules/ diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity b/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity index ab09f11b3c5..b7f79f14b0f 100644 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity @@ -1,9 +1,9 @@ { - "systemParams": "win32-x64-115", + "systemParams": "linux-x64-127", "modulesFolders": [ "node_modules", "node_modules", - "packages\\test-app\\node_modules" + "packages/test-app/node_modules" ], "flags": [], "linkedModules": [], diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/foo b/test/fixtures/test-app-yarn-several-workspace/node_modules/foo new file mode 120000 index 00000000000..61d898a3a60 --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/foo @@ -0,0 +1 @@ +../packages/foo \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/foo/package.json b/test/fixtures/test-app-yarn-several-workspace/node_modules/foo/package.json deleted file mode 100644 index 28a5b85beef..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/foo/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "foo", - "version": "1.0.0", - "main": "index.js", - "license": "MIT", - "dependencies": { - "ms": "2.0.0", - "electron-log": "2.2.8" - } -} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app new file mode 120000 index 00000000000..6d4c4c138ca --- /dev/null +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app @@ -0,0 +1 @@ +../packages/test-app \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.html b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.html deleted file mode 100644 index a25b3367d5e..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Hello World! - - - -

Hello World!

- We are using node , - Chrome , - and Electron . - - Args: . - - Env: . - - - - diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.js deleted file mode 100644 index c7e706aa9db..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/index.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict' - -const { app, ipcMain, BrowserWindow, Menu, Tray } = require("electron") -const fs = require("fs") -const path = require("path") - -// Module to control application life. -// Module to create native browser window. - -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the JavaScript object is garbage collected. -let mainWindow; - -let tray = null - -function createWindow () { - if (process.platform === "linux" && process.env.APPDIR != null) { - tray = new Tray(path.join(process.env.APPDIR, "testapp.png")) - const contextMenu = Menu.buildFromTemplate([ - {label: 'Item1', type: 'radio'}, - {label: 'Item2', type: 'radio'}, - {label: 'Item3', type: 'radio', checked: true}, - {label: 'Item4', type: 'radio'} - ]) - tray.setToolTip('This is my application.') - tray.setContextMenu(contextMenu) - } - - // Create the browser window. - mainWindow = new BrowserWindow({width: 800, height: 600}); - - // and load the index.html of the app. - mainWindow.loadURL('file://' + __dirname + '/index.html'); - - // Open the DevTools. - mainWindow.webContents.openDevTools(); - - mainWindow.webContents.executeJavaScript(`console.log("appData: ${app.getPath("appData").replace(/\\/g, "\\\\")}")`) - mainWindow.webContents.executeJavaScript(`console.log("userData: ${app.getPath("userData").replace(/\\/g, "\\\\")}")`) - - // Emitted when the window is closed. - mainWindow.on('closed', function() { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null; - }); -} - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -app.on('ready', createWindow); - -// Quit when all windows are closed. -app.on('window-all-closed', function () { - // On MacOS it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin') { - app.quit(); - } -}); - -app.on("activate", function () { - if (mainWindow === null) { - createWindow() - } -}) - -ipcMain.on("saveAppData", () => { - try { - // electron doesn't escape / in the product name - fs.writeFileSync(path.join(app.getPath("appData"), "Test App ßW", "testFile"), "test") - } - catch (e) { - mainWindow.webContents.executeJavaScript(`console.log(\`userData: ${e}\`)`) - } -}) \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/LICENSE b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/LICENSE deleted file mode 100644 index 1f7f7e1438c..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Alexey Prokhorov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/README.md b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/README.md deleted file mode 100644 index a1ab28fa943..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/README.md +++ /dev/null @@ -1,163 +0,0 @@ -# electron-log -[![Build Status](https://travis-ci.org/megahertz/electron-log.svg?branch=master)](https://travis-ci.org/megahertz/electron-log) -[![NPM version](https://badge.fury.io/js/electron-log.svg)](https://badge.fury.io/js/electron-log) -[![Dependencies status](https://david-dm.org/megahertz/electron-log/status.svg)](https://david-dm.org/megahertz/electron-log) - -## Description - -Just a simple logging module for your Electron or NW.js application. -No dependencies. No complicated configuration. Just require and use. -It can be used without Electron. - -By default it writes logs to the following locations: - - * **on Linux:** `~/.config//log.log` - * **on OS X:** `~/Library/Logs//log.log` - * **on Windows:** `%USERPROFILE%\AppData\Roaming\\log.log` - -## Installation - -Install with [npm](https://npmjs.org/package/electron-log): - - npm install electron-log - -## Usage - -```js -var log = require('electron-log'); - -log.info('Hello, log'); -``` -### Log levels - -electron-log supports the following log levels: - - error, warn, info, verbose, debug, silly - -### Transport - -Transport is a simple function which requires an object which describes -a message. By default, two transports are active: console and file. -Please be aware that the file log level is 'warn' by default, so info -and debug messages will be filtered. The file path is dependent on the -current platform. - - - -#### Disable default transport: - -```js -log.transports.file.level = false; -log.transports.console.level = false; -``` - -#### Override transport: - -```js -var format = require('util'); - -log.transports.console = function(msg) { - var text = util.format.apply(util, msg.data); - console.log(`[${msg.date.toLocaleTimeString()} ${msg.level}] ${text}`); -}; -``` -Please be aware that if you override a transport function the default -transport options (like level or format) will be undefined. - -#### Console Transport - -```js -// Log level -log.transports.console.level = 'warn'; - -/** - * Set output format template. Available variables: - * Main: {level}, {text} - * Date: {y},{m},{d},{h},{i},{s},{ms} - */ -log.transports.console.format = '{h}:{i}:{s}:{ms} {text}'; - -// Set a function which formats output -log.transports.console.format = (msg) => util.format.apply(util, msg.data); -``` - -#### Renderer Console transport -Show logs in Chromium DevTools Console. It has the same options as -console transport. - -#### File transport - -```js -// Same as for console transport -log.transports.file.level = 'warn'; -log.transports.file.format = '{h}:{i}:{s}:{ms} {text}'; - -// Set approximate maximum log size in bytes. When it exceeds, -// the archived log will be saved as the log.old.log file -log.transports.file.maxSize = 5 * 1024 * 1024; - -// Write to this file, must be set before first logging -log.transports.file.file = __dirname + '/log.txt'; - -// fs.createWriteStream options, must be set before first logging -log.transports.file.streamConfig = { flags: 'w' }; - -// set existed file stream -log.transports.file.stream = fs.createWriteStream('log.txt'); -``` - -By default, file transport reads a productName or name property from -package.json to determine a log path like -`~/.config//log.log`. If you have no package.json or you want -to specify another path, just set the appName property: - -```js -log.transports.file.appName = 'test'; -``` -This value should be set before the first log method call. - -## Renderer process - -Since version 2.0.0 this package works differently in main and renderer -processes. When it's included in a renderer process it sends logs to -the main process through IPC. There are no API changes, you can still -require the package by the same way both in main and renderer processes, -but please be aware that transport configuration is available only -inside the main process. - -## Change Log - -**2.1.0** - - Add Renderer Console transport - -**2.0.0** - - Move log.appName property to log.transports.file.appName. - - Change a log message object. See updated - [Override transport section](#override-transport) if you use a custom - transport. - - Now it's not possible to configure transports from a renderer - process, only from the main. - - To disable a transport set its level to false. - - Fix problems when this package is used from a renderer process. - - Add Typescript definitions. - - Add [log-s](https://github.com/megahertz/log-s) transport - (experimental). - - Fix file transport appName detection when an application is run - in dev environment (through `electron .` or similar way) - -**1.3.0** - -- #18 Rename 'warning' log level to 'warn' - -**1.2.0** - - - #14 Use native console levels instead of console.log - -**1.0.16** - - - Prefer to use package.json:productName instead of package.json:name - to determine a log path. - -## License - -Licensed under MIT. diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/electron-log.d.ts b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/electron-log.d.ts deleted file mode 100644 index af2527a1086..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/electron-log.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -export type LogLevel = "error" | "warn" | "info" | "verbose" | "debug" | "silly"; -export type LevelOption = LogLevel | false; - -export type IFormat = (msg: ILogMessage) => void; - -export interface ILogMessage { - data: any[]; - date: Date; - level: LogLevel; -} - -export interface IConsoleTransport { - (msg: ILogMessage): void; - level: LevelOption; - format: IFormat | string; -} - -export interface IFileTransport { - (msg: ILogMessage): void; - appName?: string; - file?: string; - format: IFormat | string; - level: LevelOption; - maxSize: number; - streamConfig?: object; - findLogPath(appName: string): string; -} - -export interface ILogSTransport { - (msg: ILogMessage): void; - client: object; - depth: number; - level: LevelOption; - url?: string; -} - -export declare function error(...params: any[]): void; -export declare function warn(...params: any[]): void; -export declare function info(...params: any[]): void; -export declare function verbose(...params: any[]): void; -export declare function debug(...params: any[]): void; -export declare function silly(...params: any[]): void; - -export declare const transports: { - console: IConsoleTransport; - file: IFileTransport; - logS: ILogSTransport; - rendererConsole: IConsoleTransport; -}; - -// tslint:disable object-literal-sort-keys -export default { - error, - warn, - info, - verbose, - debug, - silly, - transports, -}; diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/index.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/index.js deleted file mode 100644 index ece47214b63..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -if (process.type === 'renderer') { - module.exports = require('./renderer'); -} else { - module.exports = require('./main'); -} \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/format.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/format.js deleted file mode 100644 index fa96c0144b9..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/format.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -var util = require('util'); -var EOL = require('os').EOL; - -module.exports = { - format: format, - pad: pad, - stringifyArray: stringifyArray -}; - -function format(msg, formatter) { - if (typeof formatter === 'function') { - return formatter(msg); - } - - var date = msg.date; - - return formatter - .replace('{level}', msg.level) - .replace('{text}', stringifyArray(msg.data)) - .replace('{y}', date.getFullYear()) - .replace('{m}', pad(date.getMonth() + 1)) - .replace('{d}', pad(date.getDate())) - .replace('{h}', pad(date.getHours())) - .replace('{i}', pad(date.getMinutes())) - .replace('{s}', pad(date.getSeconds())) - .replace('{ms}', pad(date.getMilliseconds(), 3)); -} - -function stringifyArray(data) { - data = data.map(function formatErrors(arg) { - return arg instanceof Error ? arg.stack + EOL : arg; - }); - return util.format.apply(util, data); -} - -function pad(number, zeros) { - zeros = zeros || 2; - return (new Array(zeros + 1).join('0') + number).substr(-zeros, zeros); -} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/log.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/log.js deleted file mode 100644 index 9be83d6ed72..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/log.js +++ /dev/null @@ -1,42 +0,0 @@ -// jshint -W040 -'use strict'; - -var LEVELS = ['error', 'warn', 'info', 'verbose', 'debug', 'silly']; - -module.exports = log; - -function log(transports, level, text) { - var data = Array.prototype.slice.call(arguments, 2); - - var msg = { - data: data, - date: new Date(), - level: level - }; - - for (var i in transports) { - // jshint -W089 - if (!transports.hasOwnProperty(i) || typeof transports[i] !== 'function') { - continue; - } - - var transport = transports[i]; - - if (transport === false || !compareLevels(transport.level, level)) { - continue; - } - - if (transport.level === false) continue; - - transport.call(null, msg); - } -} - -function compareLevels(passLevel, checkLevel) { - var pass = LEVELS.indexOf(passLevel); - var check = LEVELS.indexOf(checkLevel); - if (check === -1 || pass === -1) { - return true; - } - return check <= pass; -} \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/console.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/console.js deleted file mode 100644 index 880d44c55e2..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/console.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var format = require('../format'); - -transport.level = 'silly'; -transport.format = '[{h}:{i}:{s}.{ms}] [{level}] {text}'; - -module.exports = transport; - -function transport(msg) { - var text = format.format(msg, transport.format); - if (console[msg.level]) { - console[msg.level](text); - } else { - console.log(text); - } -} - diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/find-log-path.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/find-log-path.js deleted file mode 100644 index 7eba2300fb3..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/find-log-path.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; - -var fs = require('fs'); -var path = require('path'); -var os = require('os'); -var getAppName = require('./get-app-name'); - -module.exports = findLogPath; - -/** - * Try to determine a platform-specific path where can write logs - * @param {string} [appName] Used to determine the last part of a log path - * @return {string|boolean} - */ -function findLogPath(appName) { - appName = appName || getAppName(); - if (!appName) { - return false; - } - - var homeDir = os.homedir ? os.homedir() : process.env['HOME']; - - var dir; - switch (process.platform) { - case 'linux': { - dir = prepareDir(process.env['XDG_CONFIG_HOME'], appName) - .or(homeDir, '.config', appName) - .or(process.env['XDG_DATA_HOME'], appName) - .or(homeDir, '.local', 'share', appName) - .result; - break; - } - - case 'darwin': { - dir = prepareDir(homeDir, 'Library', 'Logs', appName) - .or(homeDir, 'Library', 'Application Support', appName) - .result; - break; - } - - case 'win32': { - dir = prepareDir(process.env['APPDATA'], appName) - .or(homeDir, 'AppData', 'Roaming', appName) - .result; - break; - } - } - - if (dir) { - return path.join(dir, 'log.log'); - } else { - return false; - } -} - - - -function prepareDir(dirPath) { - // jshint -W040 - if (!this || this.or !== prepareDir || !this.result) { - if (!dirPath) { - return { or: prepareDir }; - } - - //noinspection JSCheckFunctionSignatures - dirPath = path.join.apply(path, arguments); - mkDir(dirPath); - - try { - fs.accessSync(dirPath, fs.W_OK); - } catch (e) { - return { or: prepareDir }; - } - } - - return { - or: prepareDir, - result: (this ? this.result : false) || dirPath - }; -} - -function mkDir(dirPath, root) { - var dirs = dirPath.split(path.sep); - var dir = dirs.shift(); - root = (root || '') + dir + path.sep; - - try { - fs.mkdirSync(root); - } catch (e) { - if (!fs.statSync(root).isDirectory()) { - throw new Error(e); - } - } - - return !dirs.length || mkDir(dirs.join(path.sep), root); -} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/get-app-name.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/get-app-name.js deleted file mode 100644 index 213ae49bcf8..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/get-app-name.js +++ /dev/null @@ -1,91 +0,0 @@ -// jshint -W074 -'use strict'; - -/** @name process.resourcesPath */ - -var fs = require('fs'); -var path = require('path'); -var consoleTransport = require('../console'); - -module.exports = getAppName; - -function getAppName() { - try { - var name = loadPackageName(); - if (name) { - return name; - } - return warn('electron-log: unable to load the app name from package.json'); - } catch (e) { - return warn('electron-log: ' + e.message); - } -} - -/** - * Try to load main app package - * @throws {Error} - * @return {Object|null} - */ -function loadPackageName() { - var packageFile; - - try { - if (require.main.filename) { - packageFile = find(path.dirname(require.main.filename)); - } - } catch (e) {} - - if (!packageFile && process.resourcesPath) { - packageFile = find(path.join(process.resourcesPath, 'app.asar')); - var electronModule = path.join('node_modules', 'electron', 'package.json'); - if (packageFile && packageFile.indexOf(electronModule) !== -1) { - packageFile = null; - } - } - - if (!packageFile) { - packageFile = find(process.cwd()); - } - - if (!packageFile) { - return null; - } - - var content = fs.readFileSync(packageFile, 'utf-8'); - var packageData = JSON.parse(content); - - //noinspection JSUnresolvedVariable - return packageData ? packageData.productName || packageData.name : false; -} - -function find(root) { - var file; - - while (!file) { - var parent; - file = path.join(root, 'package.json'); - - try { - fs.statSync(file); - } catch (e) { - parent = path.resolve(root, '..'); - file = null; - } - - if (root === parent) { - break; - } - - root = parent; - } - - return file; -} - -function warn(message) { - consoleTransport({ - data: [message], - date: new Date(), - level: 'warn' - }); -} \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/index.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/index.js deleted file mode 100644 index 94fa9f88219..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/file/index.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; - -var fs = require('fs'); -var EOL = require('os').EOL; -var format = require('../../format'); -var consoleTransport = require('../console'); -var findLogPath = require('./find-log-path'); - -transport.findLogPath = findLogPath; -transport.format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text}'; -transport.level = 'warn'; -transport.maxSize = 1024 * 1024; -transport.streamConfig = undefined; - -module.exports = transport; - -function transport(msg) { - var text = format.format(msg, transport.format) + EOL; - - if (transport.stream === undefined) { - initSteamConfig(); - openStream(); - } - - if (transport.level === false) { - return; - } - - var needLogRotation = transport.maxSize > 0 && - getStreamSize(transport.stream) > transport.maxSize; - - if (needLogRotation) { - archiveLog(transport.stream); - openStream(); - } - - transport.stream.write(text); -} - -function initSteamConfig() { - transport.file = transport.file || findLogPath(transport.appName); - - if (!transport.file) { - transport.level = false; - logConsole('Could not set a log file'); - } -} - -function openStream() { - if (transport.level === false) { - return; - } - - transport.stream = fs.createWriteStream( - transport.file, - transport.streamConfig || { flags: 'a' } - ); -} - -function getStreamSize(stream) { - if (!stream) { - return 0; - } - - if (stream.logSizeAtStart === undefined) { - try { - stream.logSizeAtStart = fs.statSync(stream.path).size; - } catch (e) { - stream.logSizeAtStart = 0; - } - } - - return stream.logSizeAtStart + stream.bytesWritten; -} - -function archiveLog(stream) { - if (stream.end) { - stream.end(); - } - - try { - fs.renameSync(stream.path, stream.path.replace(/log$/, 'old.log')); - } catch (e) { - logConsole('Could not rotate log', e); - } -} - -function logConsole(message, error) { - var data = ['electron-log.transports.file: ' + message]; - - if (error) { - data.push(error); - } - - consoleTransport({ data: data, date: new Date(), level: 'warn' }); -} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/log-s.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/log-s.js deleted file mode 100644 index e7b1d49dd5f..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/log-s.js +++ /dev/null @@ -1,86 +0,0 @@ -// jshint -W074, -W089 -'use strict'; - -var http = require('http'); -var https = require('https'); -var url = require('url'); - -transport.client = { name: 'electron-application' }; -transport.depth = 6; -transport.level = false; -transport.url = null; - -module.exports = transport; - -function transport(msg) { - if (!transport.url) return; - - var data = jsonDepth({ - client: transport.client, - data: msg.data, - date: msg.date.getTime(), - level: msg.level - }, transport.depth + 1); - - post(transport.url, data); -} - -function post(serverUrl, data) { - var urlObject = url.parse(serverUrl); - var transport = urlObject.protocol === 'https:' ? https : http; - - var body = JSON.stringify(data); - - var options = { - hostname: urlObject.hostname, - port: urlObject.port, - path: urlObject.path, - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Content-Length': body.length - } - }; - - var request = transport.request(options); - request.write(body); - request.end(); -} - -function jsonDepth(json, depth) { - if (depth < 1) { - if (Array.isArray(json)) return '[array]'; - if (typeof json === 'object') return '[object]'; - return json; - } - - if (Array.isArray(json)) { - return json.map(function(child) { - return jsonDepth(child, depth - 1); - }); - } - - if (json && typeof json.getMonth === 'function') { - return json; - } - - if (json === null) { - return null; - } - - if (typeof json === 'object') { - if (typeof json.toJSON === 'function') { - json = json.toJSON(); - } - - var newJson = {}; - for (var i in json) { - //noinspection JSUnfilteredForInLoop - newJson[i] = jsonDepth(json[i], depth - 1); - } - - return newJson; - } - - return json; -} \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/renderer-console.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/renderer-console.js deleted file mode 100644 index a50f09990fa..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/lib/transports/renderer-console.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var BrowserWindow; -try { - BrowserWindow = require('electron').BrowserWindow; -} catch (e) { - BrowserWindow = null; -} - -var format = require('../format'); - -transport.level = BrowserWindow ? 'silly' : false; -transport.format = '[{h}:{i}:{s}.{ms}] {text}'; - -module.exports = transport; - -function transport(msg) { - if (!BrowserWindow) return; - - var text = format.format(msg, transport.format); - BrowserWindow.getAllWindows().forEach(function(wnd) { - wnd.webContents.send('__ELECTRON_LOG_RENDERER__', msg.level, text); - }); -} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/main.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/main.js deleted file mode 100644 index bf4181d59d4..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/main.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var electron; -try { - electron = require('electron'); -} catch (e) { - electron = null; -} - -var log = require('./lib/log'); -var transportConsole = require('./lib/transports/console'); -var transportFile = require('./lib/transports/file'); -var transportLogS = require('./lib/transports/log-s'); -var transportRendererConsole = require('./lib/transports/renderer-console'); - -var transports = { - console: transportConsole, - file: transportFile, - logS: transportLogS, - rendererConsole: transportRendererConsole -}; - -module.exports = { - transports: transports, - - error: log.bind(null, transports, 'error'), - warn: log.bind(null, transports, 'warn'), - info: log.bind(null, transports, 'info'), - verbose: log.bind(null, transports, 'verbose'), - debug: log.bind(null, transports, 'debug'), - silly: log.bind(null, transports, 'silly'), - log: log.bind(null, transports, 'info') -}; - -module.exports.default = module.exports; - -if (electron && electron.ipcMain) { - electron.ipcMain.on('__ELECTRON_LOG__', onRendererLog); - var appName = electron.app.getName(); - if (appName !== 'Electron') { - transportFile.appName = appName; - } -} - -function onRendererLog(event, data) { - if (Array.isArray(data)) { - data.unshift(transports); - log.apply(null, data); - } -} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/package.json b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/package.json deleted file mode 100644 index 6d62dde372b..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "electron-log", - "version": "2.2.9", - "description": "Just a very simple logging module for your Electron application", - "main": "./index.js", - "scripts": { - "test": "npm run jshint && npm run jscs && npm run tslint && npm run mocha && npm run test-projects", - "mocha": "mocha index.spec.js lib/{,**/}{,**/}*.spec.js", - "test-projects": "mocha test-projects/**/*.spec.js", - "test-projects-install": "node test-projects/install.js", - "jscs": "jscs .", - "jshint": "jshint --exclude ./node_modules,./test-projects . --verbose", - "tslint": "tslint electron-log.d.ts" - }, - "typings": "./electron-log.d.ts", - "repository": { - "type": "git", - "url": "git+https://github.com/megahertz/electron-log.git" - }, - "files": [ - "index.js", - "main.js", - "renderer.js", - "lib/**/*.js", - "!lib/**/*.spec.js", - "electron-log.d.ts" - ], - "keywords": [ - "electron", - "atom", - "log", - "logger", - "logging", - "windows", - "mac", - "osx", - "linux", - "desktop" - ], - "author": "Alexey Prokhorov", - "license": "MIT", - "bugs": { - "url": "https://github.com/megahertz/electron-log/issues" - }, - "homepage": "https://github.com/megahertz/electron-log#readme", - "devDependencies": { - "chai": "*", - "jscs": "*", - "jshint": "*", - "jshint-reporter-jscs": "*", - "mocha": "*", - "rewire": "*", - "tslint": "*", - "typescript": "*" - } -} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/renderer.js b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/renderer.js deleted file mode 100644 index 12f55f4378b..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/node_modules/electron-log/renderer.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -module.exports = null; - -var ipcRenderer; -try { - ipcRenderer = require('electron').ipcRenderer; -} catch (e) { - ipcRenderer = null; -} - -if (ipcRenderer) { - module.exports = { - error: log.bind(null, 'error'), - warn: log.bind(null, 'warn'), - info: log.bind(null, 'info'), - verbose: log.bind(null, 'verbose'), - debug: log.bind(null, 'debug'), - silly: log.bind(null, 'silly'), - log: log.bind(null, 'info') - }; - - module.exports.default = module.exports; - - ipcRenderer.on('__ELECTRON_LOG_RENDERER__', function(event, level, text) { - if (level === 'verbose') { - level = 'log'; - } else if (level === 'silly') { - level = 'debug'; - } - - console[level](text); - }); -} - -function log() { - var data = Array.prototype.slice.call(arguments); - - data = data.map(function(obj) { - if (obj instanceof Error) { - obj = obj.stack || obj; - } - - return obj; - }); - - ipcRenderer.send('__ELECTRON_LOG__', data); -} diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/package.json b/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/package.json deleted file mode 100644 index d762448ba8a..00000000000 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/test-app/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "test-app", - "productName": "Test App ßW", - "version": "1.1.0", - "homepage": "http://foo.example.com", - "description": "Test Application (test quite \" #378)", - "author": "Foo Bar ", - "license": "MIT", - "build": { - "electronVersion": "23.3.10", - "appId": "org.electron-builder.testApp", - "compression": "store", - "npmRebuild": false, - "mac": { - "category": "your.app.category.type" - }, - "linux": { - "category": "Development" - } - }, - "dependencies": { - "ms": "2.0.0", - "electron-log": "2.2.9" - } -} diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity b/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity index c5925435c1c..eca5009180a 100644 --- a/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity +++ b/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity @@ -1,5 +1,5 @@ { - "systemParams": "win32-x64-115", + "systemParams": "linux-x64-127", "modulesFolders": [ "node_modules", "node_modules" diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app b/test/fixtures/test-app-yarn-workspace/node_modules/test-app new file mode 120000 index 00000000000..6d4c4c138ca --- /dev/null +++ b/test/fixtures/test-app-yarn-workspace/node_modules/test-app @@ -0,0 +1 @@ +../packages/test-app \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.html b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.html deleted file mode 100644 index a25b3367d5e..00000000000 --- a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Hello World! - - - -

Hello World!

- We are using node , - Chrome , - and Electron . - - Args: . - - Env: . - - - - diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.js b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.js deleted file mode 100644 index c7e706aa9db..00000000000 --- a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/index.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict' - -const { app, ipcMain, BrowserWindow, Menu, Tray } = require("electron") -const fs = require("fs") -const path = require("path") - -// Module to control application life. -// Module to create native browser window. - -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the JavaScript object is garbage collected. -let mainWindow; - -let tray = null - -function createWindow () { - if (process.platform === "linux" && process.env.APPDIR != null) { - tray = new Tray(path.join(process.env.APPDIR, "testapp.png")) - const contextMenu = Menu.buildFromTemplate([ - {label: 'Item1', type: 'radio'}, - {label: 'Item2', type: 'radio'}, - {label: 'Item3', type: 'radio', checked: true}, - {label: 'Item4', type: 'radio'} - ]) - tray.setToolTip('This is my application.') - tray.setContextMenu(contextMenu) - } - - // Create the browser window. - mainWindow = new BrowserWindow({width: 800, height: 600}); - - // and load the index.html of the app. - mainWindow.loadURL('file://' + __dirname + '/index.html'); - - // Open the DevTools. - mainWindow.webContents.openDevTools(); - - mainWindow.webContents.executeJavaScript(`console.log("appData: ${app.getPath("appData").replace(/\\/g, "\\\\")}")`) - mainWindow.webContents.executeJavaScript(`console.log("userData: ${app.getPath("userData").replace(/\\/g, "\\\\")}")`) - - // Emitted when the window is closed. - mainWindow.on('closed', function() { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null; - }); -} - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -app.on('ready', createWindow); - -// Quit when all windows are closed. -app.on('window-all-closed', function () { - // On MacOS it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin') { - app.quit(); - } -}); - -app.on("activate", function () { - if (mainWindow === null) { - createWindow() - } -}) - -ipcMain.on("saveAppData", () => { - try { - // electron doesn't escape / in the product name - fs.writeFileSync(path.join(app.getPath("appData"), "Test App ßW", "testFile"), "test") - } - catch (e) { - mainWindow.webContents.executeJavaScript(`console.log(\`userData: ${e}\`)`) - } -}) \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json b/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json deleted file mode 100644 index 82f146450f6..00000000000 --- a/test/fixtures/test-app-yarn-workspace/node_modules/test-app/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "test-app", - "productName": "Test App ßW", - "version": "1.1.0", - "homepage": "http://foo.example.com", - "description": "Test Application (test quite \" #378)", - "author": "Foo Bar ", - "license": "MIT", - "build": { - "electronVersion": "23.3.10", - "appId": "org.electron-builder.testApp", - "compression": "store", - "npmRebuild": false, - "mac": { - "category": "your.app.category.type" - }, - "linux": { - "category": "Development" - } - }, - "dependencies": { - "electron-log": "2.2.9", - "@sentry/core": "0.5.4" - } -} From c571825de63188d3653eca4d5850fb5b6cb24218 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 01:42:11 +0800 Subject: [PATCH 20/85] fix ut --- test/snapshots/BuildTest.js.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/snapshots/BuildTest.js.snap b/test/snapshots/BuildTest.js.snap index f44f0c1ba25..d5919e818e5 100644 --- a/test/snapshots/BuildTest.js.snap +++ b/test/snapshots/BuildTest.js.snap @@ -5184,8 +5184,8 @@ Array [ exports[`win smart unpack 4`] = ` Array [ - "node_modules/@electron-builder/test-smart-unpack-empty/package.json", "node_modules/@electron-builder/test-smart-unpack/package.json", + "node_modules/@electron-builder/test-smart-unpack-empty/package.json", "node_modules/debug/.coveralls.yml", "node_modules/debug/.eslintrc", "node_modules/debug/.npmignore", From 24dbf440020e5e4920062ae18e15a792ba48e7b2 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 09:52:58 +0800 Subject: [PATCH 21/85] use detect --- packages/app-builder-lib/package.json | 2 +- packages/app-builder-lib/src/util/yarn.ts | 48 +++++++++++++---------- pnpm-lock.yaml | 10 ++--- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/packages/app-builder-lib/package.json b/packages/app-builder-lib/package.json index dae01fa4040..509738dad12 100644 --- a/packages/app-builder-lib/package.json +++ b/packages/app-builder-lib/package.json @@ -78,7 +78,7 @@ "semver": "^7.3.8", "tar": "^6.1.12", "temp-file": "^3.4.0", - "node-module-collector": "1.1.2" + "node-module-collector": "1.1.3" }, "///": "babel in devDependencies for proton tests", "devDependencies": { diff --git a/packages/app-builder-lib/src/util/yarn.ts b/packages/app-builder-lib/src/util/yarn.ts index 3f7b9536da6..ac81846a0b3 100644 --- a/packages/app-builder-lib/src/util/yarn.ts +++ b/packages/app-builder-lib/src/util/yarn.ts @@ -10,6 +10,7 @@ import { getProjectRootPath } from "@electron/rebuild/lib/search-module" import { rebuild as remoteRebuild } from "./rebuild/rebuild" import { executeAppBuilderAndWriteJson } from "./appBuilder" import { RebuildMode } from "@electron/rebuild/lib/types" +import { PM, detect, getNpmVersion } from "node-module-collector" export async function installOrRebuild(config: Configuration, appDir: string, options: RebuildOptions, forceInstall = false) { const effectiveOptions: RebuildOptions = { @@ -78,13 +79,16 @@ export function getGypEnv(frameworkInfo: DesktopFrameworkInfo, platform: NodeJS. } } -function checkYarnBerry() { - const npmUserAgent = process.env["npm_config_user_agent"] || "" - const regex = /yarn\/(\d+)\./gm +async function checkYarnBerry(pm:PM) { + if (pm !== "yarn") { + return false + } + const version = await getNpmVersion(pm) + if (version == null || version.split('.').length < 1) { + return false + } - const yarnVersionMatch = regex.exec(npmUserAgent) - const yarnMajorVersion = Number(yarnVersionMatch?.[1] ?? 0) - return yarnMajorVersion >= 2 + return version.split('.')[0] >= "2" } async function installDependencies(config: Configuration, appDir: string, options: RebuildOptions): Promise { @@ -93,9 +97,9 @@ async function installDependencies(config: Configuration, appDir: string, option const additionalArgs = options.additionalArgs log.info({ platform, arch, appDir }, `installing production dependencies`) - let execPath = process.env.npm_execpath || process.env.NPM_CLI_JS + const pm = await detect({ cwd: appDir }) const execArgs = ["install"] - const isYarnBerry = checkYarnBerry() + const isYarnBerry = checkYarnBerry(pm) if (!isYarnBerry) { if (process.env.NPM_NO_BIN_LINKS === "true") { execArgs.push("--no-bin-links") @@ -103,16 +107,11 @@ async function installDependencies(config: Configuration, appDir: string, option execArgs.push("--production") } - if (!isRunningYarn(execPath)) { + if (!isRunningYarn(pm)) { execArgs.push("--prefer-offline") } - if (execPath == null) { - execPath = getPackageToolPath() - } else if (!isYarnBerry) { - execArgs.unshift(execPath) - execPath = process.env.npm_node_execpath || process.env.NODE_EXE || "node" - } + const execPath = getPackageToolPath(pm) if (additionalArgs != null) { execArgs.push(...additionalArgs) @@ -146,17 +145,26 @@ export async function nodeGypRebuild(platform: NodeJS.Platform, arch: string, fr await spawn(nodeGyp, args, { env: getGypEnv(frameworkInfo, platform, arch, true) }) } -function getPackageToolPath() { +function getPackageToolPath(pm: PM) { if (process.env.FORCE_YARN === "true") { return process.platform === "win32" ? "yarn.cmd" : "yarn" - } else { - return process.platform === "win32" ? "npm.cmd" : "npm" + } + + switch(pm) { + case "yarn": + return process.platform === "win32" ? "yarn.cmd" : "yarn" + case "pnpm": + return process.platform === "win32" ? "pnpm.cmd" : "pnpm" + case "npm": + return process.platform === "win32" ? "npm.cmd" : "npm" + default: + return process.platform === "win32" ? "npm.cmd" : "npm" } } -function isRunningYarn(execPath: string | null | undefined) { +function isRunningYarn(pm: PM) { const userAgent = process.env.npm_config_user_agent - return process.env.FORCE_YARN === "true" || (execPath != null && path.basename(execPath).startsWith("yarn")) || (userAgent != null && /\byarn\b/.test(userAgent)) + return process.env.FORCE_YARN === "true" || pm === "yarn" || (userAgent != null && /\byarn\b/.test(userAgent)) } export interface RebuildOptions { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 01488c75e4f..a0383e2daf1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,8 +162,8 @@ importers: specifier: ^10.0.0 version: 10.0.1 node-module-collector: - specifier: 1.1.2 - version: 1.1.2 + specifier: 1.1.3 + version: 1.1.3 resedit: specifier: ^1.7.0 version: 1.7.1 @@ -4931,8 +4931,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-module-collector@1.1.2: - resolution: {integrity: sha512-GEUmt3SlSWCT6FWv+Pz7gHNU+HrhN+Rd08SeINUP2vJRmGkK72AoUqvgl9kvmSiLdBOleL2nzicjMQpWS+4ZPQ==} + node-module-collector@1.1.3: + resolution: {integrity: sha512-YWjRx7+SaisjO/lq4UxgH0b4dyg6ZJ1DueNIsJvBHXhrGFN7EeaWRusT365BUm7RO48yYKhUwKDIMRIm+M2XEA==} node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -11985,7 +11985,7 @@ snapshots: node-int64@0.4.0: {} - node-module-collector@1.1.2: {} + node-module-collector@1.1.3: {} node-releases@2.0.14: {} From 1b8cc020c2220e4524eb36a6c59bea2d6f7bbd68 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 09:54:22 +0800 Subject: [PATCH 22/85] format code --- packages/app-builder-lib/src/util/yarn.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/app-builder-lib/src/util/yarn.ts b/packages/app-builder-lib/src/util/yarn.ts index ac81846a0b3..d508c6f9f04 100644 --- a/packages/app-builder-lib/src/util/yarn.ts +++ b/packages/app-builder-lib/src/util/yarn.ts @@ -79,7 +79,7 @@ export function getGypEnv(frameworkInfo: DesktopFrameworkInfo, platform: NodeJS. } } -async function checkYarnBerry(pm:PM) { +async function checkYarnBerry(pm: PM) { if (pm !== "yarn") { return false } @@ -148,9 +148,9 @@ export async function nodeGypRebuild(platform: NodeJS.Platform, arch: string, fr function getPackageToolPath(pm: PM) { if (process.env.FORCE_YARN === "true") { return process.platform === "win32" ? "yarn.cmd" : "yarn" - } - - switch(pm) { + } + + switch (pm) { case "yarn": return process.platform === "win32" ? "yarn.cmd" : "yarn" case "pnpm": From 98021d1bbfd1c581cb8381809cfaed9e6037cbde Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 09:56:22 +0800 Subject: [PATCH 23/85] format code --- packages/app-builder-lib/src/util/yarn.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/app-builder-lib/src/util/yarn.ts b/packages/app-builder-lib/src/util/yarn.ts index d508c6f9f04..62007725bfe 100644 --- a/packages/app-builder-lib/src/util/yarn.ts +++ b/packages/app-builder-lib/src/util/yarn.ts @@ -84,11 +84,11 @@ async function checkYarnBerry(pm: PM) { return false } const version = await getNpmVersion(pm) - if (version == null || version.split('.').length < 1) { + if (version == null || version.split(".").length < 1) { return false } - return version.split('.')[0] >= "2" + return version.split(".")[0] >= "2" } async function installDependencies(config: Configuration, appDir: string, options: RebuildOptions): Promise { @@ -99,7 +99,7 @@ async function installDependencies(config: Configuration, appDir: string, option log.info({ platform, arch, appDir }, `installing production dependencies`) const pm = await detect({ cwd: appDir }) const execArgs = ["install"] - const isYarnBerry = checkYarnBerry(pm) + const isYarnBerry = await checkYarnBerry(pm) if (!isYarnBerry) { if (process.env.NPM_NO_BIN_LINKS === "true") { execArgs.push("--no-bin-links") From 5bff81b8f55b6941a616d75d2cac895d82dd61fa Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 10:39:17 +0800 Subject: [PATCH 24/85] fix ut --- test/snapshots/mac/macPackagerTest.js.snap | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/snapshots/mac/macPackagerTest.js.snap b/test/snapshots/mac/macPackagerTest.js.snap index a849cc56675..87dc4e91ce5 100644 --- a/test/snapshots/mac/macPackagerTest.js.snap +++ b/test/snapshots/mac/macPackagerTest.js.snap @@ -766,6 +766,14 @@ Object { "files": Object { "Release": Object { "files": Object { + "node-addon-api": Object { + "files": Object { + "node_addon_api_except.stamp": Object { + "size": "", + "unpacked": true, + }, + }, + }, "pty.node": Object { "size": "", "unpacked": true, @@ -1350,6 +1358,14 @@ Object { }, }, }, + "node-addon-api": Object { + "files": Object { + "node_addon_api.Makefile": Object { + "size": "", + "unpacked": true, + }, + }, + }, "package.json": Object { "size": "", "unpacked": true, From 6da8b0a94875b02656b29e30e90c2ddb99d45bb1 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 10:59:04 +0800 Subject: [PATCH 25/85] fix ut --- test/snapshots/mac/macPackagerTest.js.snap | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/snapshots/mac/macPackagerTest.js.snap b/test/snapshots/mac/macPackagerTest.js.snap index 87dc4e91ce5..dd02315d6dd 100644 --- a/test/snapshots/mac/macPackagerTest.js.snap +++ b/test/snapshots/mac/macPackagerTest.js.snap @@ -1563,6 +1563,7 @@ Array [ "app.asar.unpacked/node_modules/node-pty/src/shared/conout.ts", "app.asar.unpacked/node_modules/node-pty/scripts/post-install.js", "app.asar.unpacked/node_modules/node-pty/scripts/publish.js", + "app.asar.unpacked/node_modules/node-pty/node-addon-api/node_addon_api.Makefile", "app.asar.unpacked/node_modules/node-pty/lib/conpty_console_list_agent.js", "app.asar.unpacked/node_modules/node-pty/lib/conpty_console_list_agent.js.map", "app.asar.unpacked/node_modules/node-pty/lib/eventEmitter2.js", @@ -1691,6 +1692,7 @@ Array [ "app.asar.unpacked/node_modules/node-pty/build/node_gyp_bins/python3", "app.asar.unpacked/node_modules/node-pty/build/Release/pty.node", "app.asar.unpacked/node_modules/node-pty/build/Release/spawn-helper", + "app.asar.unpacked/node_modules/node-pty/build/Release/node-addon-api/node_addon_api_except.stamp", "app.asar.unpacked/node_modules/node-mac-permissions/LICENSE", "app.asar.unpacked/node_modules/node-mac-permissions/index.js", Object { From 69e827a6106714734fc4a4f8e3a358679947e5e9 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 5 Oct 2024 11:04:29 +0800 Subject: [PATCH 26/85] update to 1.1.4 --- packages/app-builder-lib/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/app-builder-lib/package.json b/packages/app-builder-lib/package.json index 509738dad12..3314270ca34 100644 --- a/packages/app-builder-lib/package.json +++ b/packages/app-builder-lib/package.json @@ -78,7 +78,7 @@ "semver": "^7.3.8", "tar": "^6.1.12", "temp-file": "^3.4.0", - "node-module-collector": "1.1.3" + "node-module-collector": "1.1.4" }, "///": "babel in devDependencies for proton tests", "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0383e2daf1..8144d3030a3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,8 +162,8 @@ importers: specifier: ^10.0.0 version: 10.0.1 node-module-collector: - specifier: 1.1.3 - version: 1.1.3 + specifier: 1.1.4 + version: 1.1.4 resedit: specifier: ^1.7.0 version: 1.7.1 @@ -4931,8 +4931,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-module-collector@1.1.3: - resolution: {integrity: sha512-YWjRx7+SaisjO/lq4UxgH0b4dyg6ZJ1DueNIsJvBHXhrGFN7EeaWRusT365BUm7RO48yYKhUwKDIMRIm+M2XEA==} + node-module-collector@1.1.4: + resolution: {integrity: sha512-GFpfLl37pOP/IMZ0VdEqBgDvJ6lpXGYwJuwjw62Gp3VJV9ys/QhHwePDC2DSelK2LW4ORs/HJOmp/9Huosy6Ow==} node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -11985,7 +11985,7 @@ snapshots: node-int64@0.4.0: {} - node-module-collector@1.1.3: {} + node-module-collector@1.1.4: {} node-releases@2.0.14: {} From accaf6ae7fb23d807b45e9bc6a20daed11584010 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 14:42:43 +0800 Subject: [PATCH 27/85] fix others submodule filter --- packages/app-builder-lib/scheme.json | 5 --- packages/app-builder-lib/src/configuration.ts | 6 ---- .../app-builder-lib/src/util/AppFileWalker.ts | 31 ++----------------- packages/app-builder-lib/src/util/filter.ts | 6 ++++ packages/builder-util/src/fs.ts | 4 +-- 5 files changed, 10 insertions(+), 42 deletions(-) diff --git a/packages/app-builder-lib/scheme.json b/packages/app-builder-lib/scheme.json index ea3069a11e0..5d82908de9f 100644 --- a/packages/app-builder-lib/scheme.json +++ b/packages/app-builder-lib/scheme.json @@ -7142,11 +7142,6 @@ "description": "Whether to include PDB files.", "type": "boolean" }, - "includeSubNodeModules": { - "default": false, - "description": "Whether to include *all* of the submodules node_modules directories", - "type": "boolean" - }, "launchUiVersion": { "description": "*libui-based frameworks only* The version of LaunchUI you are packaging for. Applicable for Windows only. Defaults to version suitable for used framework version.", "type": [ diff --git a/packages/app-builder-lib/src/configuration.ts b/packages/app-builder-lib/src/configuration.ts index 5d1dfa61f54..fe876c4ae74 100644 --- a/packages/app-builder-lib/src/configuration.ts +++ b/packages/app-builder-lib/src/configuration.ts @@ -183,12 +183,6 @@ export interface CommonConfiguration { readonly removePackageKeywords?: boolean } export interface Configuration extends CommonConfiguration, PlatformSpecificBuildOptions, Hooks { - /** - * Whether to include *all* of the submodules node_modules directories - * @default false - */ - includeSubNodeModules?: boolean - /** * Whether to use [electron-compile](http://github.com/electron/electron-compile) to compile app. Defaults to `true` if `electron-compile` in the dependencies. And `false` if in the `devDependencies` or doesn't specified. */ diff --git a/packages/app-builder-lib/src/util/AppFileWalker.ts b/packages/app-builder-lib/src/util/AppFileWalker.ts index 579f8633152..d7a298d4388 100644 --- a/packages/app-builder-lib/src/util/AppFileWalker.ts +++ b/packages/app-builder-lib/src/util/AppFileWalker.ts @@ -4,8 +4,6 @@ import { FileMatcher } from "../fileMatcher" import { Packager } from "../packager" import * as path from "path" -const nodeModulesSystemDependentSuffix = `${path.sep}node_modules` - function addAllPatternIfNeed(matcher: FileMatcher) { if (!matcher.isSpecifiedAsEmptyArray && (matcher.isEmpty() || matcher.containsOnlyIgnore())) { matcher.prependPattern("**/*") @@ -55,22 +53,7 @@ function createAppFilter(matcher: FileMatcher, packager: Packager): Filter | nul if (packager.areNodeModulesHandledExternally) { return matcher.isEmpty() ? null : matcher.createFilter() } - - const nodeModulesFilter: Filter = (file, fileStat) => { - return !(fileStat.isDirectory() && file.endsWith(nodeModulesSystemDependentSuffix)) - } - - if (matcher.isEmpty()) { - return nodeModulesFilter - } - - const filter = matcher.createFilter() - return (file, fileStat) => { - if (!nodeModulesFilter(file, fileStat)) { - return !!packager.config.includeSubNodeModules - } - return filter(file, fileStat) - } + return matcher.createFilter() } /** @internal */ @@ -85,18 +68,8 @@ export class AppFileWalker extends FileCopyHelper implements FileConsumer { // eslint-disable-next-line @typescript-eslint/no-unused-vars consume(file: string, fileStat: Stats, parent: string, siblingNames: Array): any { if (fileStat.isDirectory()) { - // https://github.com/electron-userland/electron-builder/issues/1539 - // but do not filter if we inside node_modules dir - // update: solution disabled, node module resolver should support such setup - if (file.endsWith(nodeModulesSystemDependentSuffix)) { - if (!this.packager.config.includeSubNodeModules) { const matchesFilter = this.matcherFilter(file, fileStat) - if (!matchesFilter) { - // Skip the file - return false - } - } - } + return !matchesFilter } else { // save memory - no need to store stat for directory this.metadata.set(file, fileStat) diff --git a/packages/app-builder-lib/src/util/filter.ts b/packages/app-builder-lib/src/util/filter.ts index 51fe2e515d5..9ac7888a47c 100644 --- a/packages/app-builder-lib/src/util/filter.ts +++ b/packages/app-builder-lib/src/util/filter.ts @@ -55,6 +55,12 @@ export function createFilter(src: string, patterns: Array, excludePat } const relative = getRelativePath(file, srcWithEndSlash) + + // filter the root node_modules, but not a subnode_modules (like /appDir/others/foo/node_modules/blah) + if(relative === "node_modules") { + return false + } + // https://github.com/electron-userland/electron-builder/issues/867 return minimatchAll(relative, patterns, stat) && (excludePatterns == null || stat.isDirectory() || !minimatchAll(relative, excludePatterns, stat)) } diff --git a/packages/builder-util/src/fs.ts b/packages/builder-util/src/fs.ts index b00bbf51e9d..8d246d442f5 100644 --- a/packages/builder-util/src/fs.ts +++ b/packages/builder-util/src/fs.ts @@ -88,9 +88,9 @@ export async function walk(initialDirPath: string, filter?: Filter | null, consu } const consumerResult = consumer == null ? null : consumer.consume(filePath, stat, dirPath, childNames) - if (consumerResult === false) { + if (consumerResult === true) { return null - } else if (consumerResult == null || !("then" in consumerResult)) { + } else if (consumerResult=== false || consumerResult == null || !("then" in consumerResult)) { if (stat.isDirectory()) { dirs.push(name) return null From fdb9dd0f4a73a2bc0d81bf19706f7313ddfb521f Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 15:20:43 +0800 Subject: [PATCH 28/85] add ut --- test/src/ignoreTest.ts | 82 +++++++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 25 deletions(-) diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts index 1cb08a560c3..4ddf80697a9 100644 --- a/test/src/ignoreTest.ts +++ b/test/src/ignoreTest.ts @@ -108,13 +108,12 @@ test.ifNotCiMac( ) test.ifDevOrLinuxCi( - "copied no submodule node_modules", + "copied sub node_modules of the rootDir/node_modules", app( { targets: Platform.LINUX.createTarget(DIR_TARGET), config: { asar: false, - includeSubNodeModules: false, }, }, { @@ -122,19 +121,16 @@ test.ifDevOrLinuxCi( return Promise.all([ modifyPackageJson(projectDir, data => { data.dependencies = { - "submodule-1-test": "*", - "submodule-2-test": "*", + "@types/node": "22.7.4", + "undici-types":"5.25.1", ...data.dependencies, } }), - outputFile(path.join(projectDir, "node_modules", "submodule-1-test", "node_modules", "package.json"), "{}"), - outputFile(path.join(projectDir, "node_modules", "submodule-2-test", "node_modules", "package.json"), "{}"), ]) }, packed: context => { return Promise.all([ - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "submodule-1-test", "node_modules")).doesNotExist(), - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "submodule-2-test", "node_modules")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "@types/node", "node_modules")).isDirectory(), ]) }, } @@ -142,13 +138,12 @@ test.ifDevOrLinuxCi( ) test.ifDevOrLinuxCi( - "copied all submodule node_modules", + "Don't copy sub node_modules of the other dir instead of rootDir", app( { targets: Platform.LINUX.createTarget(DIR_TARGET), config: { asar: false, - includeSubNodeModules: true, }, }, { @@ -156,33 +151,40 @@ test.ifDevOrLinuxCi( return Promise.all([ modifyPackageJson(projectDir, data => { data.dependencies = { - "submodule-1-test": "*", - "submodule-2-test": "*", ...data.dependencies, } }), - outputFile(path.join(projectDir, "node_modules", "submodule-1-test", "node_modules", "package.json"), "{}"), - outputFile(path.join(projectDir, "node_modules", "submodule-2-test", "node_modules", "package.json"), "{}"), + outputFile(path.join(projectDir, "others", "node_modules","package.json"), "{}"), + outputFile(path.join(projectDir, "others", "test1","package.json"), "{}"), + outputFile(path.join(projectDir, "others", "submodule-2-test", "node_modules", "package.json"), "{}"), + outputFile(path.join(projectDir, "others", "submodule-2-test", "test2", "package.json"), "{}"), ]) }, packed: context => { return Promise.all([ - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "submodule-1-test", "node_modules")).isDirectory(), - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "submodule-2-test", "node_modules")).isDirectory(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "others", "node_modules")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "others", "test1")).isDirectory(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "others", "test1", "package.json")).isFile(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "others", "submodule-2-test", "node_modules")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "others", "submodule-2-test", "test2")).isDirectory(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "others", "submodule-2-test", "test2", "package.json")).isFile(), ]) }, } ) ) -test.skip.ifDevOrLinuxCi( +test.ifDevOrLinuxCi( "copied select submodule node_modules", app( { targets: Platform.LINUX.createTarget(DIR_TARGET), config: { asar: false, - files: ["**/*", "*/submodule-1-test/node_modules/**"], + // should use **/ instead of */, + // we use the related path to match, so the relative path is submodule-1-test/node_modules + // */ will not match submodule-1-test/node_modules + files: ["**/*", "**/submodule-1-test/node_modules/**"], }, }, { @@ -190,24 +192,54 @@ test.skip.ifDevOrLinuxCi( return Promise.all([ modifyPackageJson(projectDir, data => { data.dependencies = { - "submodule-1-test": "*", - "submodule-2-test": "*", ...data.dependencies, } }), - outputFile(path.join(projectDir, "node_modules", "submodule-1-test", "node_modules", "package.json"), "{}"), - outputFile(path.join(projectDir, "node_modules", "submodule-2-test", "node_modules", "package.json"), "{}"), + outputFile(path.join(projectDir, "submodule-1-test", "node_modules", "package.json"), "{}"), + outputFile(path.join(projectDir, "submodule-2-test", "node_modules", "package.json"), "{}"), ]) }, packed: context => { return Promise.all([ - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "submodule-1-test", "node_modules")).isDirectory(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).isDirectory(), assertThat( - path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "submodule-1-test", "node_modules", "package.json") + path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules", "package.json") ).isFile(), - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "submodule-2-test", "node_modules")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app","submodule-2-test", "node_modules")).doesNotExist(), ]) }, } ) ) + +test.ifDevOrLinuxCi( + "cannot copied select submodule node_modules by */", + app( + { + targets: Platform.LINUX.createTarget(DIR_TARGET), + config: { + asar: false, + files: ["**/*", "*/submodule-1-test/node_modules/**"], + }, + }, + { + projectDirCreated: projectDir => { + return Promise.all([ + modifyPackageJson(projectDir, data => { + data.dependencies = { + ...data.dependencies, + } + }), + outputFile(path.join(projectDir, "submodule-1-test", "node_modules", "package.json"), "{}"), + outputFile(path.join(projectDir, "submodule-2-test", "node_modules", "package.json"), "{}"), + ]) + }, + packed: context => { + return Promise.all([ + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app","submodule-2-test", "node_modules")).doesNotExist(), + ]) + }, + } + ) +) \ No newline at end of file From 4f0d78a9bf7491cd89d54c79e46dc2c8cf4c7437 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 15:21:56 +0800 Subject: [PATCH 29/85] format code --- .../app-builder-lib/src/util/AppFileWalker.ts | 6 +++--- packages/app-builder-lib/src/util/filter.ts | 2 +- packages/builder-util/src/fs.ts | 18 +++++++++--------- test/src/ignoreTest.ts | 10 +++++----- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/app-builder-lib/src/util/AppFileWalker.ts b/packages/app-builder-lib/src/util/AppFileWalker.ts index d7a298d4388..222856bd8a7 100644 --- a/packages/app-builder-lib/src/util/AppFileWalker.ts +++ b/packages/app-builder-lib/src/util/AppFileWalker.ts @@ -18,7 +18,7 @@ export abstract class FileCopyHelper { protected readonly matcher: FileMatcher, readonly filter: Filter | null, protected readonly packager: Packager - ) {} + ) { } protected handleFile(file: string, parent: string, fileStat: Stats): Promise | null { if (!fileStat.isSymbolicLink()) { @@ -68,8 +68,8 @@ export class AppFileWalker extends FileCopyHelper implements FileConsumer { // eslint-disable-next-line @typescript-eslint/no-unused-vars consume(file: string, fileStat: Stats, parent: string, siblingNames: Array): any { if (fileStat.isDirectory()) { - const matchesFilter = this.matcherFilter(file, fileStat) - return !matchesFilter + const matchesFilter = this.matcherFilter(file, fileStat) + return !matchesFilter } else { // save memory - no need to store stat for directory this.metadata.set(file, fileStat) diff --git a/packages/app-builder-lib/src/util/filter.ts b/packages/app-builder-lib/src/util/filter.ts index 9ac7888a47c..57afd34f3be 100644 --- a/packages/app-builder-lib/src/util/filter.ts +++ b/packages/app-builder-lib/src/util/filter.ts @@ -57,7 +57,7 @@ export function createFilter(src: string, patterns: Array, excludePat const relative = getRelativePath(file, srcWithEndSlash) // filter the root node_modules, but not a subnode_modules (like /appDir/others/foo/node_modules/blah) - if(relative === "node_modules") { + if (relative === "node_modules") { return false } diff --git a/packages/builder-util/src/fs.ts b/packages/builder-util/src/fs.ts index 8d246d442f5..a784ff7f389 100644 --- a/packages/builder-util/src/fs.ts +++ b/packages/builder-util/src/fs.ts @@ -15,7 +15,7 @@ export const CONCURRENCY = { concurrency: MAX_FILE_REQUESTS } export type AfterCopyFileTransformer = (file: string) => Promise export class CopyFileTransformer { - constructor(public readonly afterCopyTransformer: AfterCopyFileTransformer) {} + constructor(public readonly afterCopyTransformer: AfterCopyFileTransformer) { } } export type FileTransformer = (file: string) => Promise | null | string | Buffer | CopyFileTransformer @@ -90,7 +90,7 @@ export async function walk(initialDirPath: string, filter?: Filter | null, consu const consumerResult = consumer == null ? null : consumer.consume(filePath, stat, dirPath, childNames) if (consumerResult === true) { return null - } else if (consumerResult=== false || consumerResult == null || !("then" in consumerResult)) { + } else if (consumerResult === false || consumerResult == null || !("then" in consumerResult)) { if (stat.isDirectory()) { dirs.push(name) return null @@ -251,14 +251,14 @@ export class FileCopier { isUseHardLink, isUseHardLink ? () => { - // files are copied concurrently, so, we must not check here currentIsUseHardLink — our code can be executed after that other handler will set currentIsUseHardLink to false - if (this.isUseHardLink) { - this.isUseHardLink = false - return true - } else { - return false - } + // files are copied concurrently, so, we must not check here currentIsUseHardLink — our code can be executed after that other handler will set currentIsUseHardLink to false + if (this.isUseHardLink) { + this.isUseHardLink = false + return true + } else { + return false } + } : null ) diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts index 4ddf80697a9..d2e03f3877b 100644 --- a/test/src/ignoreTest.ts +++ b/test/src/ignoreTest.ts @@ -122,7 +122,7 @@ test.ifDevOrLinuxCi( modifyPackageJson(projectDir, data => { data.dependencies = { "@types/node": "22.7.4", - "undici-types":"5.25.1", + "undici-types": "5.25.1", ...data.dependencies, } }), @@ -154,8 +154,8 @@ test.ifDevOrLinuxCi( ...data.dependencies, } }), - outputFile(path.join(projectDir, "others", "node_modules","package.json"), "{}"), - outputFile(path.join(projectDir, "others", "test1","package.json"), "{}"), + outputFile(path.join(projectDir, "others", "node_modules", "package.json"), "{}"), + outputFile(path.join(projectDir, "others", "test1", "package.json"), "{}"), outputFile(path.join(projectDir, "others", "submodule-2-test", "node_modules", "package.json"), "{}"), outputFile(path.join(projectDir, "others", "submodule-2-test", "test2", "package.json"), "{}"), ]) @@ -205,7 +205,7 @@ test.ifDevOrLinuxCi( assertThat( path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules", "package.json") ).isFile(), - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app","submodule-2-test", "node_modules")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-2-test", "node_modules")).doesNotExist(), ]) }, } @@ -237,7 +237,7 @@ test.ifDevOrLinuxCi( packed: context => { return Promise.all([ assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).doesNotExist(), - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app","submodule-2-test", "node_modules")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-2-test", "node_modules")).doesNotExist(), ]) }, } From 14efc3a8f7b85ed33933d4a01552923c9661ba47 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 15:26:21 +0800 Subject: [PATCH 30/85] format code --- .../app-builder-lib/src/util/AppFileWalker.ts | 2 +- packages/builder-util/src/fs.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/app-builder-lib/src/util/AppFileWalker.ts b/packages/app-builder-lib/src/util/AppFileWalker.ts index 222856bd8a7..dc2b9952ebd 100644 --- a/packages/app-builder-lib/src/util/AppFileWalker.ts +++ b/packages/app-builder-lib/src/util/AppFileWalker.ts @@ -18,7 +18,7 @@ export abstract class FileCopyHelper { protected readonly matcher: FileMatcher, readonly filter: Filter | null, protected readonly packager: Packager - ) { } + ) {} protected handleFile(file: string, parent: string, fileStat: Stats): Promise | null { if (!fileStat.isSymbolicLink()) { diff --git a/packages/builder-util/src/fs.ts b/packages/builder-util/src/fs.ts index a784ff7f389..32d13dc2b17 100644 --- a/packages/builder-util/src/fs.ts +++ b/packages/builder-util/src/fs.ts @@ -15,7 +15,7 @@ export const CONCURRENCY = { concurrency: MAX_FILE_REQUESTS } export type AfterCopyFileTransformer = (file: string) => Promise export class CopyFileTransformer { - constructor(public readonly afterCopyTransformer: AfterCopyFileTransformer) { } + constructor(public readonly afterCopyTransformer: AfterCopyFileTransformer) {} } export type FileTransformer = (file: string) => Promise | null | string | Buffer | CopyFileTransformer @@ -251,14 +251,14 @@ export class FileCopier { isUseHardLink, isUseHardLink ? () => { - // files are copied concurrently, so, we must not check here currentIsUseHardLink — our code can be executed after that other handler will set currentIsUseHardLink to false - if (this.isUseHardLink) { - this.isUseHardLink = false - return true - } else { - return false + // files are copied concurrently, so, we must not check here currentIsUseHardLink — our code can be executed after that other handler will set currentIsUseHardLink to false + if (this.isUseHardLink) { + this.isUseHardLink = false + return true + } else { + return false + } } - } : null ) From aca68c22a6518303a07d5ed6f2ecc7bfda0c3bab Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 15:50:54 +0800 Subject: [PATCH 31/85] fix ut --- packages/app-builder-lib/src/util/filter.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/app-builder-lib/src/util/filter.ts b/packages/app-builder-lib/src/util/filter.ts index 57afd34f3be..538d4484164 100644 --- a/packages/app-builder-lib/src/util/filter.ts +++ b/packages/app-builder-lib/src/util/filter.ts @@ -54,13 +54,17 @@ export function createFilter(src: string, patterns: Array, excludePat return true } - const relative = getRelativePath(file, srcWithEndSlash) + let relative = getRelativePath(file, srcWithEndSlash) // filter the root node_modules, but not a subnode_modules (like /appDir/others/foo/node_modules/blah) if (relative === "node_modules") { return false } + if(stat.isDirectory()) { + relative += "/" + } + // https://github.com/electron-userland/electron-builder/issues/867 return minimatchAll(relative, patterns, stat) && (excludePatterns == null || stat.isDirectory() || !minimatchAll(relative, excludePatterns, stat)) } From 8b1e1e28063a5e7b48ca35b853761a0f7c120fe7 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 15:52:00 +0800 Subject: [PATCH 32/85] format code --- packages/app-builder-lib/src/util/filter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-builder-lib/src/util/filter.ts b/packages/app-builder-lib/src/util/filter.ts index 538d4484164..73aa1cff309 100644 --- a/packages/app-builder-lib/src/util/filter.ts +++ b/packages/app-builder-lib/src/util/filter.ts @@ -61,7 +61,7 @@ export function createFilter(src: string, patterns: Array, excludePat return false } - if(stat.isDirectory()) { + if (stat.isDirectory()) { relative += "/" } From 8bf110d945f9a99daec47e999326e1102dc2facd Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 16:06:24 +0800 Subject: [PATCH 33/85] fix ut --- packages/app-builder-lib/src/fileMatcher.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/app-builder-lib/src/fileMatcher.ts b/packages/app-builder-lib/src/fileMatcher.ts index 5afa4220f90..6b7a99fd06d 100644 --- a/packages/app-builder-lib/src/fileMatcher.ts +++ b/packages/app-builder-lib/src/fileMatcher.ts @@ -163,8 +163,6 @@ export function getMainFileMatchers( patterns.push("package.json") } - customFirstPatterns.push("!**/node_modules") - // https://github.com/electron-userland/electron-builder/issues/1482 const relativeBuildResourceDir = path.relative(matcher.from, buildResourceDir) if (relativeBuildResourceDir.length !== 0 && !relativeBuildResourceDir.startsWith(".")) { From 32d6156738e91a811b4017de368a5fdfc9a7e849 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 16:16:35 +0800 Subject: [PATCH 34/85] fix ut --- packages/app-builder-lib/src/fileMatcher.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/app-builder-lib/src/fileMatcher.ts b/packages/app-builder-lib/src/fileMatcher.ts index 6b7a99fd06d..a974a40fb1e 100644 --- a/packages/app-builder-lib/src/fileMatcher.ts +++ b/packages/app-builder-lib/src/fileMatcher.ts @@ -182,6 +182,7 @@ export function getMainFileMatchers( break } } + patterns.unshift("!**/node_modules") patterns.splice(insertIndex, 0, ...customFirstPatterns) patterns.push(`!**/*.{${excludedExts}${packager.config.includePdb === true ? "" : ",pdb"}}`) From a22668e356eb07d92bcabdf8b44c3a11c4b40c3a Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 17:47:31 +0800 Subject: [PATCH 35/85] add excludeNodMoules --- packages/app-builder-lib/src/fileMatcher.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/app-builder-lib/src/fileMatcher.ts b/packages/app-builder-lib/src/fileMatcher.ts index a974a40fb1e..7a734dd1311 100644 --- a/packages/app-builder-lib/src/fileMatcher.ts +++ b/packages/app-builder-lib/src/fileMatcher.ts @@ -163,6 +163,20 @@ export function getMainFileMatchers( patterns.push("package.json") } + let insertExculdeNodeModulesIndex = -1 + for (let i = 0; i < patterns.length; i++) { + if (!patterns[i].startsWith("!") && (patterns[i].includes("/node_modules") || patterns[i].includes("node_modules/"))) { + insertExculdeNodeModulesIndex = i + break + } + } + + if (insertExculdeNodeModulesIndex !== -1) { + patterns.splice(insertExculdeNodeModulesIndex, 0, ...["!**/node_modules"]) + } else { + customFirstPatterns.push("!**/node_modules") + } + // https://github.com/electron-userland/electron-builder/issues/1482 const relativeBuildResourceDir = path.relative(matcher.from, buildResourceDir) if (relativeBuildResourceDir.length !== 0 && !relativeBuildResourceDir.startsWith(".")) { @@ -182,7 +196,6 @@ export function getMainFileMatchers( break } } - patterns.unshift("!**/node_modules") patterns.splice(insertIndex, 0, ...customFirstPatterns) patterns.push(`!**/*.{${excludedExts}${packager.config.includePdb === true ? "" : ",pdb"}}`) From 40df71669b7b073763ca68cd72ecc13db9c3eb70 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 19:22:02 +0800 Subject: [PATCH 36/85] fix ut --- packages/app-builder-lib/src/util/filter.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/app-builder-lib/src/util/filter.ts b/packages/app-builder-lib/src/util/filter.ts index 73aa1cff309..603e4986e74 100644 --- a/packages/app-builder-lib/src/util/filter.ts +++ b/packages/app-builder-lib/src/util/filter.ts @@ -61,10 +61,6 @@ export function createFilter(src: string, patterns: Array, excludePat return false } - if (stat.isDirectory()) { - relative += "/" - } - // https://github.com/electron-userland/electron-builder/issues/867 return minimatchAll(relative, patterns, stat) && (excludePatterns == null || stat.isDirectory() || !minimatchAll(relative, excludePatterns, stat)) } From 5a2e5c536b3b655ebe7cef7560cbce14fcd4f472 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 19:22:37 +0800 Subject: [PATCH 37/85] fix ut --- packages/app-builder-lib/src/util/filter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-builder-lib/src/util/filter.ts b/packages/app-builder-lib/src/util/filter.ts index 603e4986e74..57afd34f3be 100644 --- a/packages/app-builder-lib/src/util/filter.ts +++ b/packages/app-builder-lib/src/util/filter.ts @@ -54,7 +54,7 @@ export function createFilter(src: string, patterns: Array, excludePat return true } - let relative = getRelativePath(file, srcWithEndSlash) + const relative = getRelativePath(file, srcWithEndSlash) // filter the root node_modules, but not a subnode_modules (like /appDir/others/foo/node_modules/blah) if (relative === "node_modules") { From 9d363a8d8d5c609e08fa2b42c0c09b5b4d7ff27c Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 19:40:11 +0800 Subject: [PATCH 38/85] fix ut --- packages/app-builder-lib/src/fileMatcher.ts | 4 ++-- packages/app-builder-lib/src/util/filter.ts | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/app-builder-lib/src/fileMatcher.ts b/packages/app-builder-lib/src/fileMatcher.ts index 7a734dd1311..32affd2ea19 100644 --- a/packages/app-builder-lib/src/fileMatcher.ts +++ b/packages/app-builder-lib/src/fileMatcher.ts @@ -172,9 +172,9 @@ export function getMainFileMatchers( } if (insertExculdeNodeModulesIndex !== -1) { - patterns.splice(insertExculdeNodeModulesIndex, 0, ...["!**/node_modules"]) + patterns.splice(insertExculdeNodeModulesIndex, 0, ...["!**/node_modules/**"]) } else { - customFirstPatterns.push("!**/node_modules") + customFirstPatterns.push("!**/node_modules/**") } // https://github.com/electron-userland/electron-builder/issues/1482 diff --git a/packages/app-builder-lib/src/util/filter.ts b/packages/app-builder-lib/src/util/filter.ts index 57afd34f3be..43320306512 100644 --- a/packages/app-builder-lib/src/util/filter.ts +++ b/packages/app-builder-lib/src/util/filter.ts @@ -54,13 +54,17 @@ export function createFilter(src: string, patterns: Array, excludePat return true } - const relative = getRelativePath(file, srcWithEndSlash) + let relative = getRelativePath(file, srcWithEndSlash) // filter the root node_modules, but not a subnode_modules (like /appDir/others/foo/node_modules/blah) if (relative === "node_modules") { return false } + if (relative.endsWith("node_modules")) { + relative += "/" + } + // https://github.com/electron-userland/electron-builder/issues/867 return minimatchAll(relative, patterns, stat) && (excludePatterns == null || stat.isDirectory() || !minimatchAll(relative, excludePatterns, stat)) } From ceef74c8e7c5311e6e5950917c917b158bf680aa Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 19:55:41 +0800 Subject: [PATCH 39/85] fix ut --- test/src/ignoreTest.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts index d2e03f3877b..76f94182d5a 100644 --- a/test/src/ignoreTest.ts +++ b/test/src/ignoreTest.ts @@ -86,21 +86,20 @@ test.ifNotCiMac( }, }, { + isInstallDepsBefore: true, projectDirCreated: projectDir => { return Promise.all([ modifyPackageJson(projectDir, data => { data.devDependencies = { - "@electron/osx-sign": "*", + "semver": "6.3.1", ...data.devDependencies, } }), - outputFile(path.join(projectDir, "node_modules", "@electron/osx-sign", "package.json"), "{}"), ]) }, packed: context => { return Promise.all([ - assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", "@electron/osx-sign")).doesNotExist(), - assertThat(path.join(context.getResources(Platform.LINUX), "app", "ignoreMe")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", "semver")).doesNotExist(), ]) }, } @@ -117,12 +116,13 @@ test.ifDevOrLinuxCi( }, }, { + isInstallDepsBefore: true, projectDirCreated: projectDir => { return Promise.all([ modifyPackageJson(projectDir, data => { data.dependencies = { - "@types/node": "22.7.4", - "undici-types": "5.25.1", + "electron-updater": "6.3.9", + "semver":"6.3.1", ...data.dependencies, } }), @@ -130,7 +130,7 @@ test.ifDevOrLinuxCi( }, packed: context => { return Promise.all([ - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "@types/node", "node_modules")).isDirectory(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "electron-updater", "node_modules")).isDirectory(), ]) }, } From 861f23403ec6d2cfe0a60c7f6bbf0fe9d57214ec Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 20:26:18 +0800 Subject: [PATCH 40/85] add ut --- test/src/ignoreTest.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts index 76f94182d5a..c810e9d3afa 100644 --- a/test/src/ignoreTest.ts +++ b/test/src/ignoreTest.ts @@ -113,6 +113,7 @@ test.ifDevOrLinuxCi( targets: Platform.LINUX.createTarget(DIR_TARGET), config: { asar: false, + files: ["**/*", "**/submodule-1-test/node_modules/**"], }, }, { @@ -126,11 +127,18 @@ test.ifDevOrLinuxCi( ...data.dependencies, } }), + outputFile(path.join(projectDir, "submodule-1-test", "node_modules", "package.json"), "{}"), + outputFile(path.join(projectDir, "others", "node_modules", "package.json"), "{}"), ]) }, packed: context => { return Promise.all([ assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "electron-updater", "node_modules")).isDirectory(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "others", "node_modules")).doesNotExist(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).isDirectory(), + assertThat( + path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules", "package.json") + ).isFile(), ]) }, } From e2c79819751454dbd1a939610d66e940b5dfb73d Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 20:37:52 +0800 Subject: [PATCH 41/85] fix ut --- test/snapshots/ignoreTest.js.snap | 12 ------------ test/src/ignoreTest.ts | 1 + 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/test/snapshots/ignoreTest.js.snap b/test/snapshots/ignoreTest.js.snap index c2543ed1d83..299ed97f063 100644 --- a/test/snapshots/ignoreTest.js.snap +++ b/test/snapshots/ignoreTest.js.snap @@ -6,18 +6,6 @@ Object { } `; -exports[`copied all submodule node_modules 1`] = ` -Object { - "linux": Array [], -} -`; - -exports[`copied no submodule node_modules 1`] = ` -Object { - "linux": Array [], -} -`; - exports[`copied select submodule node_modules 1`] = ` Object { "linux": Array [], diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts index c810e9d3afa..4f44fa3eba6 100644 --- a/test/src/ignoreTest.ts +++ b/test/src/ignoreTest.ts @@ -83,6 +83,7 @@ test.ifNotCiMac( targets: Platform.LINUX.createTarget(DIR_TARGET), config: { asar: false, + files: ["**/*", "**/submodule-1-test/node_modules/**"], }, }, { From e39e6d85a40c65a0c338403de4b04aedda7ce0c0 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 22:37:22 +0800 Subject: [PATCH 42/85] add ut --- packages/app-builder-lib/src/util/filter.ts | 4 +-- test/src/ignoreTest.ts | 32 +++++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/packages/app-builder-lib/src/util/filter.ts b/packages/app-builder-lib/src/util/filter.ts index 43320306512..f0710cad5fe 100644 --- a/packages/app-builder-lib/src/util/filter.ts +++ b/packages/app-builder-lib/src/util/filter.ts @@ -59,9 +59,7 @@ export function createFilter(src: string, patterns: Array, excludePat // filter the root node_modules, but not a subnode_modules (like /appDir/others/foo/node_modules/blah) if (relative === "node_modules") { return false - } - - if (relative.endsWith("node_modules")) { + } else if (relative.endsWith("/node_modules")) { relative += "/" } diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts index 4f44fa3eba6..c9facb29121 100644 --- a/test/src/ignoreTest.ts +++ b/test/src/ignoreTest.ts @@ -240,13 +240,41 @@ test.ifDevOrLinuxCi( } }), outputFile(path.join(projectDir, "submodule-1-test", "node_modules", "package.json"), "{}"), - outputFile(path.join(projectDir, "submodule-2-test", "node_modules", "package.json"), "{}"), ]) }, packed: context => { return Promise.all([ assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).doesNotExist(), - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-2-test", "node_modules")).doesNotExist(), + ]) + }, + } + ) +) + +test.ifDevOrLinuxCi( + "cannot copied select submodule node_modules by **/submodule-1-test/node_modules", + app( + { + targets: Platform.LINUX.createTarget(DIR_TARGET), + config: { + asar: false, + files: ["**/*", "**/submodule-1-test/node_modules"], + }, + }, + { + projectDirCreated: projectDir => { + return Promise.all([ + modifyPackageJson(projectDir, data => { + data.dependencies = { + ...data.dependencies, + } + }), + outputFile(path.join(projectDir, "submodule-1-test", "node_modules", "package.json"), "{}"), + ]) + }, + packed: context => { + return Promise.all([ + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).doesNotExist(), ]) }, } From e053855f104d845f242fd3949934feda5e66b04a Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 22:54:32 +0800 Subject: [PATCH 43/85] revert some changes --- .gitignore | 2 +- package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index fdd72283d2f..dc585c7e099 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ /.vscode/ node_modules -**/node_modules *.log @@ -29,3 +28,4 @@ electron-builder-*.d.ts tsconfig.tsbuildinfo .pnpm-store/ +**/node_modules \ No newline at end of file diff --git a/package.json b/package.json index fd524fed806..19195d2fdbb 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "node": ">=14.14", "pnpm": ">=9" }, + "packageManager": "pnpm@9.4.0", "pnpm": { "patchedDependencies": { "@changesets/cli@2.27.8": "patches/@changesets__cli@2.27.8.patch" From 2a968f9dc8ca5c4f4c84011eddd855991645b890 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sun, 6 Oct 2024 22:56:17 +0800 Subject: [PATCH 44/85] delete the obsolete snapshot --- test/snapshots/globTest.js.snap | 9708 ------------------------------- 1 file changed, 9708 deletions(-) diff --git a/test/snapshots/globTest.js.snap b/test/snapshots/globTest.js.snap index 02fcb138764..da681125cc6 100644 --- a/test/snapshots/globTest.js.snap +++ b/test/snapshots/globTest.js.snap @@ -66,9714 +66,6 @@ Object { } `; -exports[`failed peer dep 1`] = ` -Object { - "linux": Array [], -} -`; - -exports[`failed peer dep 2`] = ` -Object { - "files": Object { - "app": Object { - "files": Object { - "package.json": Object { - "files": Object { - "readme.md": Object { - "size": "", - }, - }, - }, - "readme.md": Object { - "size": "", - }, - }, - }, - "index.html": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "node_modules": Object { - "files": Object { - "asap": Object { - "files": Object { - "CHANGES.md": Object { - "size": "", - }, - "LICENSE.md": Object { - "size": "", - }, - "asap.js": Object { - "size": "", - }, - "browser-asap.js": Object { - "size": "", - }, - "browser-raw.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "raw.js": Object { - "size": "", - }, - }, - }, - "classnames": Object { - "files": Object { - ".editorconfig": Object { - "size": "", - }, - "CONTRIBUTING.md": Object { - "size": "", - }, - "LICENSE": Object { - "size": "", - }, - "bower.json": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "tests.js": Object { - "size": "", - }, - }, - }, - "core-js": Object { - "files": Object { - "Gruntfile.js": Object { - "size": "", - }, - "LICENSE": Object { - "size": "", - }, - "bower.json": Object { - "size": "", - }, - "build": Object { - "files": Object { - "Gruntfile.ls": Object { - "size": "", - }, - "build.ls": Object { - "size": "", - }, - "config.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - }, - }, - "client": Object { - "files": Object { - "core.js": Object { - "size": "", - }, - "core.min.js": Object { - "size": "", - }, - "core.min.js.map": Object { - "size": "", - }, - "library.js": Object { - "size": "", - }, - "library.min.js": Object { - "size": "", - }, - "library.min.js.map": Object { - "size": "", - }, - "shim.js": Object { - "size": "", - }, - "shim.min.js": Object { - "size": "", - }, - "shim.min.js.map": Object { - "size": "", - }, - }, - }, - "core": Object { - "files": Object { - "_.js": Object { - "size": "", - }, - "delay.js": Object { - "size": "", - }, - "dict.js": Object { - "size": "", - }, - "function.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "log.js": Object { - "size": "", - }, - "number.js": Object { - "size": "", - }, - "object.js": Object { - "size": "", - }, - "string.js": Object { - "size": "", - }, - }, - }, - "es5": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - }, - }, - "es6": Object { - "files": Object { - "array.js": Object { - "size": "", - }, - "function.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "math.js": Object { - "size": "", - }, - "number.js": Object { - "size": "", - }, - "object.js": Object { - "size": "", - }, - "promise.js": Object { - "size": "", - }, - "reflect.js": Object { - "size": "", - }, - "regexp.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - "string.js": Object { - "size": "", - }, - "symbol.js": Object { - "size": "", - }, - "weak-map.js": Object { - "size": "", - }, - "weak-set.js": Object { - "size": "", - }, - }, - }, - "es7": Object { - "files": Object { - "array.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "object.js": Object { - "size": "", - }, - "regexp.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - "string.js": Object { - "size": "", - }, - }, - }, - "fn": Object { - "files": Object { - "_.js": Object { - "size": "", - }, - "array": Object { - "files": Object { - "concat.js": Object { - "size": "", - }, - "copy-within.js": Object { - "size": "", - }, - "entries.js": Object { - "size": "", - }, - "every.js": Object { - "size": "", - }, - "fill.js": Object { - "size": "", - }, - "filter.js": Object { - "size": "", - }, - "find-index.js": Object { - "size": "", - }, - "find.js": Object { - "size": "", - }, - "for-each.js": Object { - "size": "", - }, - "from.js": Object { - "size": "", - }, - "includes.js": Object { - "size": "", - }, - "index-of.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - "join.js": Object { - "size": "", - }, - "keys.js": Object { - "size": "", - }, - "last-index-of.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "of.js": Object { - "size": "", - }, - "pop.js": Object { - "size": "", - }, - "push.js": Object { - "size": "", - }, - "reduce-right.js": Object { - "size": "", - }, - "reduce.js": Object { - "size": "", - }, - "reverse.js": Object { - "size": "", - }, - "shift.js": Object { - "size": "", - }, - "slice.js": Object { - "size": "", - }, - "some.js": Object { - "size": "", - }, - "sort.js": Object { - "size": "", - }, - "splice.js": Object { - "size": "", - }, - "unshift.js": Object { - "size": "", - }, - "values.js": Object { - "size": "", - }, - }, - }, - "clear-immediate.js": Object { - "size": "", - }, - "delay.js": Object { - "size": "", - }, - "dict.js": Object { - "size": "", - }, - "function": Object { - "files": Object { - "has-instance.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "name.js": Object { - "size": "", - }, - "part.js": Object { - "size": "", - }, - }, - }, - "get-iterator-method.js": Object { - "size": "", - }, - "get-iterator.js": Object { - "size": "", - }, - "html-collection": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - }, - }, - "is-iterable.js": Object { - "size": "", - }, - "json": Object { - "files": Object { - "stringify.js": Object { - "size": "", - }, - }, - }, - "log.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "math": Object { - "files": Object { - "acosh.js": Object { - "size": "", - }, - "asinh.js": Object { - "size": "", - }, - "atanh.js": Object { - "size": "", - }, - "cbrt.js": Object { - "size": "", - }, - "clz32.js": Object { - "size": "", - }, - "cosh.js": Object { - "size": "", - }, - "expm1.js": Object { - "size": "", - }, - "fround.js": Object { - "size": "", - }, - "hypot.js": Object { - "size": "", - }, - "imul.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "log10.js": Object { - "size": "", - }, - "log1p.js": Object { - "size": "", - }, - "log2.js": Object { - "size": "", - }, - "sign.js": Object { - "size": "", - }, - "sinh.js": Object { - "size": "", - }, - "tanh.js": Object { - "size": "", - }, - "trunc.js": Object { - "size": "", - }, - }, - }, - "node-list": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - }, - }, - "number": Object { - "files": Object { - "epsilon.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "is-finite.js": Object { - "size": "", - }, - "is-integer.js": Object { - "size": "", - }, - "is-nan.js": Object { - "size": "", - }, - "is-safe-integer.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - "max-safe-integer.js": Object { - "size": "", - }, - "min-safe-integer.js": Object { - "size": "", - }, - "parse-float.js": Object { - "size": "", - }, - "parse-int.js": Object { - "size": "", - }, - }, - }, - "object": Object { - "files": Object { - "assign.js": Object { - "size": "", - }, - "classof.js": Object { - "size": "", - }, - "create.js": Object { - "size": "", - }, - "define-properties.js": Object { - "size": "", - }, - "define-property.js": Object { - "size": "", - }, - "define.js": Object { - "size": "", - }, - "entries.js": Object { - "size": "", - }, - "freeze.js": Object { - "size": "", - }, - "get-own-property-descriptor.js": Object { - "size": "", - }, - "get-own-property-descriptors.js": Object { - "size": "", - }, - "get-own-property-names.js": Object { - "size": "", - }, - "get-own-property-symbols.js": Object { - "size": "", - }, - "get-prototype-of.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "is-extensible.js": Object { - "size": "", - }, - "is-frozen.js": Object { - "size": "", - }, - "is-object.js": Object { - "size": "", - }, - "is-sealed.js": Object { - "size": "", - }, - "is.js": Object { - "size": "", - }, - "keys.js": Object { - "size": "", - }, - "make.js": Object { - "size": "", - }, - "prevent-extensions.js": Object { - "size": "", - }, - "seal.js": Object { - "size": "", - }, - "set-prototype-of.js": Object { - "size": "", - }, - "values.js": Object { - "size": "", - }, - }, - }, - "promise.js": Object { - "size": "", - }, - "reflect": Object { - "files": Object { - "apply.js": Object { - "size": "", - }, - "construct.js": Object { - "size": "", - }, - "define-property.js": Object { - "size": "", - }, - "delete-property.js": Object { - "size": "", - }, - "enumerate.js": Object { - "size": "", - }, - "get-own-property-descriptor.js": Object { - "size": "", - }, - "get-prototype-of.js": Object { - "size": "", - }, - "get.js": Object { - "size": "", - }, - "has.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "is-extensible.js": Object { - "size": "", - }, - "own-keys.js": Object { - "size": "", - }, - "prevent-extensions.js": Object { - "size": "", - }, - "set-prototype-of.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - }, - }, - "regexp": Object { - "files": Object { - "escape.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - }, - }, - "set-immediate.js": Object { - "size": "", - }, - "set-interval.js": Object { - "size": "", - }, - "set-timeout.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - "string": Object { - "files": Object { - "at.js": Object { - "size": "", - }, - "code-point-at.js": Object { - "size": "", - }, - "ends-with.js": Object { - "size": "", - }, - "escape-html.js": Object { - "size": "", - }, - "from-code-point.js": Object { - "size": "", - }, - "includes.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - "pad-left.js": Object { - "size": "", - }, - "pad-right.js": Object { - "size": "", - }, - "raw.js": Object { - "size": "", - }, - "repeat.js": Object { - "size": "", - }, - "starts-with.js": Object { - "size": "", - }, - "trim-left.js": Object { - "size": "", - }, - "trim-right.js": Object { - "size": "", - }, - "trim.js": Object { - "size": "", - }, - "unescape-html.js": Object { - "size": "", - }, - }, - }, - "symbol": Object { - "files": Object { - "for.js": Object { - "size": "", - }, - "has-instance.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "is-concat-spreadable.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - "key-for.js": Object { - "size": "", - }, - "match.js": Object { - "size": "", - }, - "replace.js": Object { - "size": "", - }, - "search.js": Object { - "size": "", - }, - "species.js": Object { - "size": "", - }, - "split.js": Object { - "size": "", - }, - "to-primitive.js": Object { - "size": "", - }, - "to-string-tag.js": Object { - "size": "", - }, - "unscopables.js": Object { - "size": "", - }, - }, - }, - "weak-map.js": Object { - "size": "", - }, - "weak-set.js": Object { - "size": "", - }, - }, - }, - "index.js": Object { - "size": "", - }, - "js": Object { - "files": Object { - "array.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - }, - }, - "library": Object { - "files": Object { - "core": Object { - "files": Object { - "_.js": Object { - "size": "", - }, - "delay.js": Object { - "size": "", - }, - "dict.js": Object { - "size": "", - }, - "function.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "log.js": Object { - "size": "", - }, - "number.js": Object { - "size": "", - }, - "object.js": Object { - "size": "", - }, - "string.js": Object { - "size": "", - }, - }, - }, - "es5": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - }, - }, - "es6": Object { - "files": Object { - "array.js": Object { - "size": "", - }, - "function.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "math.js": Object { - "size": "", - }, - "number.js": Object { - "size": "", - }, - "object.js": Object { - "size": "", - }, - "promise.js": Object { - "size": "", - }, - "reflect.js": Object { - "size": "", - }, - "regexp.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - "string.js": Object { - "size": "", - }, - "symbol.js": Object { - "size": "", - }, - "weak-map.js": Object { - "size": "", - }, - "weak-set.js": Object { - "size": "", - }, - }, - }, - "es7": Object { - "files": Object { - "array.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "object.js": Object { - "size": "", - }, - "regexp.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - "string.js": Object { - "size": "", - }, - }, - }, - "fn": Object { - "files": Object { - "_.js": Object { - "size": "", - }, - "array": Object { - "files": Object { - "concat.js": Object { - "size": "", - }, - "copy-within.js": Object { - "size": "", - }, - "entries.js": Object { - "size": "", - }, - "every.js": Object { - "size": "", - }, - "fill.js": Object { - "size": "", - }, - "filter.js": Object { - "size": "", - }, - "find-index.js": Object { - "size": "", - }, - "find.js": Object { - "size": "", - }, - "for-each.js": Object { - "size": "", - }, - "from.js": Object { - "size": "", - }, - "includes.js": Object { - "size": "", - }, - "index-of.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - "join.js": Object { - "size": "", - }, - "keys.js": Object { - "size": "", - }, - "last-index-of.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "of.js": Object { - "size": "", - }, - "pop.js": Object { - "size": "", - }, - "push.js": Object { - "size": "", - }, - "reduce-right.js": Object { - "size": "", - }, - "reduce.js": Object { - "size": "", - }, - "reverse.js": Object { - "size": "", - }, - "shift.js": Object { - "size": "", - }, - "slice.js": Object { - "size": "", - }, - "some.js": Object { - "size": "", - }, - "sort.js": Object { - "size": "", - }, - "splice.js": Object { - "size": "", - }, - "unshift.js": Object { - "size": "", - }, - "values.js": Object { - "size": "", - }, - }, - }, - "clear-immediate.js": Object { - "size": "", - }, - "delay.js": Object { - "size": "", - }, - "dict.js": Object { - "size": "", - }, - "function": Object { - "files": Object { - "has-instance.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "name.js": Object { - "size": "", - }, - "part.js": Object { - "size": "", - }, - }, - }, - "get-iterator-method.js": Object { - "size": "", - }, - "get-iterator.js": Object { - "size": "", - }, - "html-collection": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - }, - }, - "is-iterable.js": Object { - "size": "", - }, - "json": Object { - "files": Object { - "stringify.js": Object { - "size": "", - }, - }, - }, - "log.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "math": Object { - "files": Object { - "acosh.js": Object { - "size": "", - }, - "asinh.js": Object { - "size": "", - }, - "atanh.js": Object { - "size": "", - }, - "cbrt.js": Object { - "size": "", - }, - "clz32.js": Object { - "size": "", - }, - "cosh.js": Object { - "size": "", - }, - "expm1.js": Object { - "size": "", - }, - "fround.js": Object { - "size": "", - }, - "hypot.js": Object { - "size": "", - }, - "imul.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "log10.js": Object { - "size": "", - }, - "log1p.js": Object { - "size": "", - }, - "log2.js": Object { - "size": "", - }, - "sign.js": Object { - "size": "", - }, - "sinh.js": Object { - "size": "", - }, - "tanh.js": Object { - "size": "", - }, - "trunc.js": Object { - "size": "", - }, - }, - }, - "node-list": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - }, - }, - "number": Object { - "files": Object { - "epsilon.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "is-finite.js": Object { - "size": "", - }, - "is-integer.js": Object { - "size": "", - }, - "is-nan.js": Object { - "size": "", - }, - "is-safe-integer.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - "max-safe-integer.js": Object { - "size": "", - }, - "min-safe-integer.js": Object { - "size": "", - }, - "parse-float.js": Object { - "size": "", - }, - "parse-int.js": Object { - "size": "", - }, - }, - }, - "object": Object { - "files": Object { - "assign.js": Object { - "size": "", - }, - "classof.js": Object { - "size": "", - }, - "create.js": Object { - "size": "", - }, - "define-properties.js": Object { - "size": "", - }, - "define-property.js": Object { - "size": "", - }, - "define.js": Object { - "size": "", - }, - "entries.js": Object { - "size": "", - }, - "freeze.js": Object { - "size": "", - }, - "get-own-property-descriptor.js": Object { - "size": "", - }, - "get-own-property-descriptors.js": Object { - "size": "", - }, - "get-own-property-names.js": Object { - "size": "", - }, - "get-own-property-symbols.js": Object { - "size": "", - }, - "get-prototype-of.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "is-extensible.js": Object { - "size": "", - }, - "is-frozen.js": Object { - "size": "", - }, - "is-object.js": Object { - "size": "", - }, - "is-sealed.js": Object { - "size": "", - }, - "is.js": Object { - "size": "", - }, - "keys.js": Object { - "size": "", - }, - "make.js": Object { - "size": "", - }, - "prevent-extensions.js": Object { - "size": "", - }, - "seal.js": Object { - "size": "", - }, - "set-prototype-of.js": Object { - "size": "", - }, - "values.js": Object { - "size": "", - }, - }, - }, - "promise.js": Object { - "size": "", - }, - "reflect": Object { - "files": Object { - "apply.js": Object { - "size": "", - }, - "construct.js": Object { - "size": "", - }, - "define-property.js": Object { - "size": "", - }, - "delete-property.js": Object { - "size": "", - }, - "enumerate.js": Object { - "size": "", - }, - "get-own-property-descriptor.js": Object { - "size": "", - }, - "get-prototype-of.js": Object { - "size": "", - }, - "get.js": Object { - "size": "", - }, - "has.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "is-extensible.js": Object { - "size": "", - }, - "own-keys.js": Object { - "size": "", - }, - "prevent-extensions.js": Object { - "size": "", - }, - "set-prototype-of.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - }, - }, - "regexp": Object { - "files": Object { - "escape.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - }, - }, - "set-immediate.js": Object { - "size": "", - }, - "set-interval.js": Object { - "size": "", - }, - "set-timeout.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - "string": Object { - "files": Object { - "at.js": Object { - "size": "", - }, - "code-point-at.js": Object { - "size": "", - }, - "ends-with.js": Object { - "size": "", - }, - "escape-html.js": Object { - "size": "", - }, - "from-code-point.js": Object { - "size": "", - }, - "includes.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - "pad-left.js": Object { - "size": "", - }, - "pad-right.js": Object { - "size": "", - }, - "raw.js": Object { - "size": "", - }, - "repeat.js": Object { - "size": "", - }, - "starts-with.js": Object { - "size": "", - }, - "trim-left.js": Object { - "size": "", - }, - "trim-right.js": Object { - "size": "", - }, - "trim.js": Object { - "size": "", - }, - "unescape-html.js": Object { - "size": "", - }, - }, - }, - "symbol": Object { - "files": Object { - "for.js": Object { - "size": "", - }, - "has-instance.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "is-concat-spreadable.js": Object { - "size": "", - }, - "iterator.js": Object { - "size": "", - }, - "key-for.js": Object { - "size": "", - }, - "match.js": Object { - "size": "", - }, - "replace.js": Object { - "size": "", - }, - "search.js": Object { - "size": "", - }, - "species.js": Object { - "size": "", - }, - "split.js": Object { - "size": "", - }, - "to-primitive.js": Object { - "size": "", - }, - "to-string-tag.js": Object { - "size": "", - }, - "unscopables.js": Object { - "size": "", - }, - }, - }, - "weak-map.js": Object { - "size": "", - }, - "weak-set.js": Object { - "size": "", - }, - }, - }, - "index.js": Object { - "size": "", - }, - "js": Object { - "files": Object { - "array.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - }, - }, - "modules": Object { - "files": Object { - "$.a-function.js": Object { - "size": "", - }, - "$.add-to-unscopables.js": Object { - "size": "", - }, - "$.an-object.js": Object { - "size": "", - }, - "$.array-copy-within.js": Object { - "size": "", - }, - "$.array-fill.js": Object { - "size": "", - }, - "$.array-includes.js": Object { - "size": "", - }, - "$.array-methods.js": Object { - "size": "", - }, - "$.array-species-create.js": Object { - "size": "", - }, - "$.buffer.js": Object { - "size": "", - }, - "$.classof.js": Object { - "size": "", - }, - "$.cof.js": Object { - "size": "", - }, - "$.collection-strong.js": Object { - "size": "", - }, - "$.collection-to-json.js": Object { - "size": "", - }, - "$.collection-weak.js": Object { - "size": "", - }, - "$.collection.js": Object { - "size": "", - }, - "$.core.js": Object { - "size": "", - }, - "$.ctx.js": Object { - "size": "", - }, - "$.defined.js": Object { - "size": "", - }, - "$.descriptors.js": Object { - "size": "", - }, - "$.dom-create.js": Object { - "size": "", - }, - "$.enum-keys.js": Object { - "size": "", - }, - "$.export.js": Object { - "size": "", - }, - "$.fails-is-regexp.js": Object { - "size": "", - }, - "$.fails.js": Object { - "size": "", - }, - "$.fix-re-wks.js": Object { - "size": "", - }, - "$.flags.js": Object { - "size": "", - }, - "$.for-of.js": Object { - "size": "", - }, - "$.get-names.js": Object { - "size": "", - }, - "$.global.js": Object { - "size": "", - }, - "$.has.js": Object { - "size": "", - }, - "$.hide.js": Object { - "size": "", - }, - "$.html.js": Object { - "size": "", - }, - "$.invoke.js": Object { - "size": "", - }, - "$.iobject.js": Object { - "size": "", - }, - "$.is-array-iter.js": Object { - "size": "", - }, - "$.is-array.js": Object { - "size": "", - }, - "$.is-integer.js": Object { - "size": "", - }, - "$.is-object.js": Object { - "size": "", - }, - "$.is-regexp.js": Object { - "size": "", - }, - "$.iter-call.js": Object { - "size": "", - }, - "$.iter-create.js": Object { - "size": "", - }, - "$.iter-define.js": Object { - "size": "", - }, - "$.iter-detect.js": Object { - "size": "", - }, - "$.iter-step.js": Object { - "size": "", - }, - "$.iterators.js": Object { - "size": "", - }, - "$.js": Object { - "size": "", - }, - "$.keyof.js": Object { - "size": "", - }, - "$.library.js": Object { - "size": "", - }, - "$.math-expm1.js": Object { - "size": "", - }, - "$.math-log1p.js": Object { - "size": "", - }, - "$.math-sign.js": Object { - "size": "", - }, - "$.microtask.js": Object { - "size": "", - }, - "$.object-assign.js": Object { - "size": "", - }, - "$.object-define.js": Object { - "size": "", - }, - "$.object-sap.js": Object { - "size": "", - }, - "$.object-to-array.js": Object { - "size": "", - }, - "$.own-keys.js": Object { - "size": "", - }, - "$.partial.js": Object { - "size": "", - }, - "$.path.js": Object { - "size": "", - }, - "$.property-desc.js": Object { - "size": "", - }, - "$.redefine-all.js": Object { - "size": "", - }, - "$.redefine.js": Object { - "size": "", - }, - "$.replacer.js": Object { - "size": "", - }, - "$.same-value.js": Object { - "size": "", - }, - "$.set-proto.js": Object { - "size": "", - }, - "$.set-species.js": Object { - "size": "", - }, - "$.set-to-string-tag.js": Object { - "size": "", - }, - "$.shared.js": Object { - "size": "", - }, - "$.species-constructor.js": Object { - "size": "", - }, - "$.strict-new.js": Object { - "size": "", - }, - "$.string-at.js": Object { - "size": "", - }, - "$.string-context.js": Object { - "size": "", - }, - "$.string-pad.js": Object { - "size": "", - }, - "$.string-repeat.js": Object { - "size": "", - }, - "$.string-trim.js": Object { - "size": "", - }, - "$.task.js": Object { - "size": "", - }, - "$.to-index.js": Object { - "size": "", - }, - "$.to-integer.js": Object { - "size": "", - }, - "$.to-iobject.js": Object { - "size": "", - }, - "$.to-length.js": Object { - "size": "", - }, - "$.to-object.js": Object { - "size": "", - }, - "$.to-primitive.js": Object { - "size": "", - }, - "$.typed-array.js": Object { - "size": "", - }, - "$.typed.js": Object { - "size": "", - }, - "$.uid.js": Object { - "size": "", - }, - "$.wks.js": Object { - "size": "", - }, - "core.delay.js": Object { - "size": "", - }, - "core.dict.js": Object { - "size": "", - }, - "core.function.part.js": Object { - "size": "", - }, - "core.get-iterator-method.js": Object { - "size": "", - }, - "core.get-iterator.js": Object { - "size": "", - }, - "core.is-iterable.js": Object { - "size": "", - }, - "core.log.js": Object { - "size": "", - }, - "core.number.iterator.js": Object { - "size": "", - }, - "core.object.classof.js": Object { - "size": "", - }, - "core.object.define.js": Object { - "size": "", - }, - "core.object.is-object.js": Object { - "size": "", - }, - "core.object.make.js": Object { - "size": "", - }, - "core.string.escape-html.js": Object { - "size": "", - }, - "core.string.unescape-html.js": Object { - "size": "", - }, - "es5.js": Object { - "size": "", - }, - "es6.array.copy-within.js": Object { - "size": "", - }, - "es6.array.fill.js": Object { - "size": "", - }, - "es6.array.find-index.js": Object { - "size": "", - }, - "es6.array.find.js": Object { - "size": "", - }, - "es6.array.from.js": Object { - "size": "", - }, - "es6.array.iterator.js": Object { - "size": "", - }, - "es6.array.of.js": Object { - "size": "", - }, - "es6.array.species.js": Object { - "size": "", - }, - "es6.date.to-string.js": Object { - "size": "", - }, - "es6.function.has-instance.js": Object { - "size": "", - }, - "es6.function.name.js": Object { - "size": "", - }, - "es6.map.js": Object { - "size": "", - }, - "es6.math.acosh.js": Object { - "size": "", - }, - "es6.math.asinh.js": Object { - "size": "", - }, - "es6.math.atanh.js": Object { - "size": "", - }, - "es6.math.cbrt.js": Object { - "size": "", - }, - "es6.math.clz32.js": Object { - "size": "", - }, - "es6.math.cosh.js": Object { - "size": "", - }, - "es6.math.expm1.js": Object { - "size": "", - }, - "es6.math.fround.js": Object { - "size": "", - }, - "es6.math.hypot.js": Object { - "size": "", - }, - "es6.math.imul.js": Object { - "size": "", - }, - "es6.math.log10.js": Object { - "size": "", - }, - "es6.math.log1p.js": Object { - "size": "", - }, - "es6.math.log2.js": Object { - "size": "", - }, - "es6.math.sign.js": Object { - "size": "", - }, - "es6.math.sinh.js": Object { - "size": "", - }, - "es6.math.tanh.js": Object { - "size": "", - }, - "es6.math.trunc.js": Object { - "size": "", - }, - "es6.number.constructor.js": Object { - "size": "", - }, - "es6.number.epsilon.js": Object { - "size": "", - }, - "es6.number.is-finite.js": Object { - "size": "", - }, - "es6.number.is-integer.js": Object { - "size": "", - }, - "es6.number.is-nan.js": Object { - "size": "", - }, - "es6.number.is-safe-integer.js": Object { - "size": "", - }, - "es6.number.max-safe-integer.js": Object { - "size": "", - }, - "es6.number.min-safe-integer.js": Object { - "size": "", - }, - "es6.number.parse-float.js": Object { - "size": "", - }, - "es6.number.parse-int.js": Object { - "size": "", - }, - "es6.object.assign.js": Object { - "size": "", - }, - "es6.object.freeze.js": Object { - "size": "", - }, - "es6.object.get-own-property-descriptor.js": Object { - "size": "", - }, - "es6.object.get-own-property-names.js": Object { - "size": "", - }, - "es6.object.get-prototype-of.js": Object { - "size": "", - }, - "es6.object.is-extensible.js": Object { - "size": "", - }, - "es6.object.is-frozen.js": Object { - "size": "", - }, - "es6.object.is-sealed.js": Object { - "size": "", - }, - "es6.object.is.js": Object { - "size": "", - }, - "es6.object.keys.js": Object { - "size": "", - }, - "es6.object.prevent-extensions.js": Object { - "size": "", - }, - "es6.object.seal.js": Object { - "size": "", - }, - "es6.object.set-prototype-of.js": Object { - "size": "", - }, - "es6.object.to-string.js": Object { - "size": "", - }, - "es6.promise.js": Object { - "size": "", - }, - "es6.reflect.apply.js": Object { - "size": "", - }, - "es6.reflect.construct.js": Object { - "size": "", - }, - "es6.reflect.define-property.js": Object { - "size": "", - }, - "es6.reflect.delete-property.js": Object { - "size": "", - }, - "es6.reflect.enumerate.js": Object { - "size": "", - }, - "es6.reflect.get-own-property-descriptor.js": Object { - "size": "", - }, - "es6.reflect.get-prototype-of.js": Object { - "size": "", - }, - "es6.reflect.get.js": Object { - "size": "", - }, - "es6.reflect.has.js": Object { - "size": "", - }, - "es6.reflect.is-extensible.js": Object { - "size": "", - }, - "es6.reflect.own-keys.js": Object { - "size": "", - }, - "es6.reflect.prevent-extensions.js": Object { - "size": "", - }, - "es6.reflect.set-prototype-of.js": Object { - "size": "", - }, - "es6.reflect.set.js": Object { - "size": "", - }, - "es6.regexp.constructor.js": Object { - "size": "", - }, - "es6.regexp.flags.js": Object { - "size": "", - }, - "es6.regexp.match.js": Object { - "size": "", - }, - "es6.regexp.replace.js": Object { - "size": "", - }, - "es6.regexp.search.js": Object { - "size": "", - }, - "es6.regexp.split.js": Object { - "size": "", - }, - "es6.set.js": Object { - "size": "", - }, - "es6.string.code-point-at.js": Object { - "size": "", - }, - "es6.string.ends-with.js": Object { - "size": "", - }, - "es6.string.from-code-point.js": Object { - "size": "", - }, - "es6.string.includes.js": Object { - "size": "", - }, - "es6.string.iterator.js": Object { - "size": "", - }, - "es6.string.raw.js": Object { - "size": "", - }, - "es6.string.repeat.js": Object { - "size": "", - }, - "es6.string.starts-with.js": Object { - "size": "", - }, - "es6.string.trim.js": Object { - "size": "", - }, - "es6.symbol.js": Object { - "size": "", - }, - "es6.typed.array-buffer.js": Object { - "size": "", - }, - "es6.typed.data-view.js": Object { - "size": "", - }, - "es6.typed.float32-array.js": Object { - "size": "", - }, - "es6.typed.float64-array.js": Object { - "size": "", - }, - "es6.typed.int16-array.js": Object { - "size": "", - }, - "es6.typed.int32-array.js": Object { - "size": "", - }, - "es6.typed.int8-array.js": Object { - "size": "", - }, - "es6.typed.uint16-array.js": Object { - "size": "", - }, - "es6.typed.uint32-array.js": Object { - "size": "", - }, - "es6.typed.uint8-array.js": Object { - "size": "", - }, - "es6.typed.uint8-clamped-array.js": Object { - "size": "", - }, - "es6.weak-map.js": Object { - "size": "", - }, - "es6.weak-set.js": Object { - "size": "", - }, - "es7.array.includes.js": Object { - "size": "", - }, - "es7.map.to-json.js": Object { - "size": "", - }, - "es7.object.entries.js": Object { - "size": "", - }, - "es7.object.get-own-property-descriptors.js": Object { - "size": "", - }, - "es7.object.values.js": Object { - "size": "", - }, - "es7.regexp.escape.js": Object { - "size": "", - }, - "es7.set.to-json.js": Object { - "size": "", - }, - "es7.string.at.js": Object { - "size": "", - }, - "es7.string.pad-left.js": Object { - "size": "", - }, - "es7.string.pad-right.js": Object { - "size": "", - }, - "es7.string.trim-left.js": Object { - "size": "", - }, - "es7.string.trim-right.js": Object { - "size": "", - }, - "js.array.statics.js": Object { - "size": "", - }, - "web.dom.iterable.js": Object { - "size": "", - }, - "web.immediate.js": Object { - "size": "", - }, - "web.timers.js": Object { - "size": "", - }, - }, - }, - "shim.js": Object { - "size": "", - }, - "web": Object { - "files": Object { - "dom.js": Object { - "size": "", - }, - "immediate.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "timers.js": Object { - "size": "", - }, - }, - }, - }, - }, - "modules": Object { - "files": Object { - "$.a-function.js": Object { - "size": "", - }, - "$.add-to-unscopables.js": Object { - "size": "", - }, - "$.an-object.js": Object { - "size": "", - }, - "$.array-copy-within.js": Object { - "size": "", - }, - "$.array-fill.js": Object { - "size": "", - }, - "$.array-includes.js": Object { - "size": "", - }, - "$.array-methods.js": Object { - "size": "", - }, - "$.array-species-create.js": Object { - "size": "", - }, - "$.buffer.js": Object { - "size": "", - }, - "$.classof.js": Object { - "size": "", - }, - "$.cof.js": Object { - "size": "", - }, - "$.collection-strong.js": Object { - "size": "", - }, - "$.collection-to-json.js": Object { - "size": "", - }, - "$.collection-weak.js": Object { - "size": "", - }, - "$.collection.js": Object { - "size": "", - }, - "$.core.js": Object { - "size": "", - }, - "$.ctx.js": Object { - "size": "", - }, - "$.defined.js": Object { - "size": "", - }, - "$.descriptors.js": Object { - "size": "", - }, - "$.dom-create.js": Object { - "size": "", - }, - "$.enum-keys.js": Object { - "size": "", - }, - "$.export.js": Object { - "size": "", - }, - "$.fails-is-regexp.js": Object { - "size": "", - }, - "$.fails.js": Object { - "size": "", - }, - "$.fix-re-wks.js": Object { - "size": "", - }, - "$.flags.js": Object { - "size": "", - }, - "$.for-of.js": Object { - "size": "", - }, - "$.get-names.js": Object { - "size": "", - }, - "$.global.js": Object { - "size": "", - }, - "$.has.js": Object { - "size": "", - }, - "$.hide.js": Object { - "size": "", - }, - "$.html.js": Object { - "size": "", - }, - "$.invoke.js": Object { - "size": "", - }, - "$.iobject.js": Object { - "size": "", - }, - "$.is-array-iter.js": Object { - "size": "", - }, - "$.is-array.js": Object { - "size": "", - }, - "$.is-integer.js": Object { - "size": "", - }, - "$.is-object.js": Object { - "size": "", - }, - "$.is-regexp.js": Object { - "size": "", - }, - "$.iter-call.js": Object { - "size": "", - }, - "$.iter-create.js": Object { - "size": "", - }, - "$.iter-define.js": Object { - "size": "", - }, - "$.iter-detect.js": Object { - "size": "", - }, - "$.iter-step.js": Object { - "size": "", - }, - "$.iterators.js": Object { - "size": "", - }, - "$.js": Object { - "size": "", - }, - "$.keyof.js": Object { - "size": "", - }, - "$.library.js": Object { - "size": "", - }, - "$.math-expm1.js": Object { - "size": "", - }, - "$.math-log1p.js": Object { - "size": "", - }, - "$.math-sign.js": Object { - "size": "", - }, - "$.microtask.js": Object { - "size": "", - }, - "$.object-assign.js": Object { - "size": "", - }, - "$.object-define.js": Object { - "size": "", - }, - "$.object-sap.js": Object { - "size": "", - }, - "$.object-to-array.js": Object { - "size": "", - }, - "$.own-keys.js": Object { - "size": "", - }, - "$.partial.js": Object { - "size": "", - }, - "$.path.js": Object { - "size": "", - }, - "$.property-desc.js": Object { - "size": "", - }, - "$.redefine-all.js": Object { - "size": "", - }, - "$.redefine.js": Object { - "size": "", - }, - "$.replacer.js": Object { - "size": "", - }, - "$.same-value.js": Object { - "size": "", - }, - "$.set-proto.js": Object { - "size": "", - }, - "$.set-species.js": Object { - "size": "", - }, - "$.set-to-string-tag.js": Object { - "size": "", - }, - "$.shared.js": Object { - "size": "", - }, - "$.species-constructor.js": Object { - "size": "", - }, - "$.strict-new.js": Object { - "size": "", - }, - "$.string-at.js": Object { - "size": "", - }, - "$.string-context.js": Object { - "size": "", - }, - "$.string-pad.js": Object { - "size": "", - }, - "$.string-repeat.js": Object { - "size": "", - }, - "$.string-trim.js": Object { - "size": "", - }, - "$.task.js": Object { - "size": "", - }, - "$.to-index.js": Object { - "size": "", - }, - "$.to-integer.js": Object { - "size": "", - }, - "$.to-iobject.js": Object { - "size": "", - }, - "$.to-length.js": Object { - "size": "", - }, - "$.to-object.js": Object { - "size": "", - }, - "$.to-primitive.js": Object { - "size": "", - }, - "$.typed-array.js": Object { - "size": "", - }, - "$.typed.js": Object { - "size": "", - }, - "$.uid.js": Object { - "size": "", - }, - "$.wks.js": Object { - "size": "", - }, - "core.delay.js": Object { - "size": "", - }, - "core.dict.js": Object { - "size": "", - }, - "core.function.part.js": Object { - "size": "", - }, - "core.get-iterator-method.js": Object { - "size": "", - }, - "core.get-iterator.js": Object { - "size": "", - }, - "core.is-iterable.js": Object { - "size": "", - }, - "core.log.js": Object { - "size": "", - }, - "core.number.iterator.js": Object { - "size": "", - }, - "core.object.classof.js": Object { - "size": "", - }, - "core.object.define.js": Object { - "size": "", - }, - "core.object.is-object.js": Object { - "size": "", - }, - "core.object.make.js": Object { - "size": "", - }, - "core.string.escape-html.js": Object { - "size": "", - }, - "core.string.unescape-html.js": Object { - "size": "", - }, - "es5.js": Object { - "size": "", - }, - "es6.array.copy-within.js": Object { - "size": "", - }, - "es6.array.fill.js": Object { - "size": "", - }, - "es6.array.find-index.js": Object { - "size": "", - }, - "es6.array.find.js": Object { - "size": "", - }, - "es6.array.from.js": Object { - "size": "", - }, - "es6.array.iterator.js": Object { - "size": "", - }, - "es6.array.of.js": Object { - "size": "", - }, - "es6.array.species.js": Object { - "size": "", - }, - "es6.date.to-string.js": Object { - "size": "", - }, - "es6.function.has-instance.js": Object { - "size": "", - }, - "es6.function.name.js": Object { - "size": "", - }, - "es6.map.js": Object { - "size": "", - }, - "es6.math.acosh.js": Object { - "size": "", - }, - "es6.math.asinh.js": Object { - "size": "", - }, - "es6.math.atanh.js": Object { - "size": "", - }, - "es6.math.cbrt.js": Object { - "size": "", - }, - "es6.math.clz32.js": Object { - "size": "", - }, - "es6.math.cosh.js": Object { - "size": "", - }, - "es6.math.expm1.js": Object { - "size": "", - }, - "es6.math.fround.js": Object { - "size": "", - }, - "es6.math.hypot.js": Object { - "size": "", - }, - "es6.math.imul.js": Object { - "size": "", - }, - "es6.math.log10.js": Object { - "size": "", - }, - "es6.math.log1p.js": Object { - "size": "", - }, - "es6.math.log2.js": Object { - "size": "", - }, - "es6.math.sign.js": Object { - "size": "", - }, - "es6.math.sinh.js": Object { - "size": "", - }, - "es6.math.tanh.js": Object { - "size": "", - }, - "es6.math.trunc.js": Object { - "size": "", - }, - "es6.number.constructor.js": Object { - "size": "", - }, - "es6.number.epsilon.js": Object { - "size": "", - }, - "es6.number.is-finite.js": Object { - "size": "", - }, - "es6.number.is-integer.js": Object { - "size": "", - }, - "es6.number.is-nan.js": Object { - "size": "", - }, - "es6.number.is-safe-integer.js": Object { - "size": "", - }, - "es6.number.max-safe-integer.js": Object { - "size": "", - }, - "es6.number.min-safe-integer.js": Object { - "size": "", - }, - "es6.number.parse-float.js": Object { - "size": "", - }, - "es6.number.parse-int.js": Object { - "size": "", - }, - "es6.object.assign.js": Object { - "size": "", - }, - "es6.object.freeze.js": Object { - "size": "", - }, - "es6.object.get-own-property-descriptor.js": Object { - "size": "", - }, - "es6.object.get-own-property-names.js": Object { - "size": "", - }, - "es6.object.get-prototype-of.js": Object { - "size": "", - }, - "es6.object.is-extensible.js": Object { - "size": "", - }, - "es6.object.is-frozen.js": Object { - "size": "", - }, - "es6.object.is-sealed.js": Object { - "size": "", - }, - "es6.object.is.js": Object { - "size": "", - }, - "es6.object.keys.js": Object { - "size": "", - }, - "es6.object.prevent-extensions.js": Object { - "size": "", - }, - "es6.object.seal.js": Object { - "size": "", - }, - "es6.object.set-prototype-of.js": Object { - "size": "", - }, - "es6.object.to-string.js": Object { - "size": "", - }, - "es6.promise.js": Object { - "size": "", - }, - "es6.reflect.apply.js": Object { - "size": "", - }, - "es6.reflect.construct.js": Object { - "size": "", - }, - "es6.reflect.define-property.js": Object { - "size": "", - }, - "es6.reflect.delete-property.js": Object { - "size": "", - }, - "es6.reflect.enumerate.js": Object { - "size": "", - }, - "es6.reflect.get-own-property-descriptor.js": Object { - "size": "", - }, - "es6.reflect.get-prototype-of.js": Object { - "size": "", - }, - "es6.reflect.get.js": Object { - "size": "", - }, - "es6.reflect.has.js": Object { - "size": "", - }, - "es6.reflect.is-extensible.js": Object { - "size": "", - }, - "es6.reflect.own-keys.js": Object { - "size": "", - }, - "es6.reflect.prevent-extensions.js": Object { - "size": "", - }, - "es6.reflect.set-prototype-of.js": Object { - "size": "", - }, - "es6.reflect.set.js": Object { - "size": "", - }, - "es6.regexp.constructor.js": Object { - "size": "", - }, - "es6.regexp.flags.js": Object { - "size": "", - }, - "es6.regexp.match.js": Object { - "size": "", - }, - "es6.regexp.replace.js": Object { - "size": "", - }, - "es6.regexp.search.js": Object { - "size": "", - }, - "es6.regexp.split.js": Object { - "size": "", - }, - "es6.set.js": Object { - "size": "", - }, - "es6.string.code-point-at.js": Object { - "size": "", - }, - "es6.string.ends-with.js": Object { - "size": "", - }, - "es6.string.from-code-point.js": Object { - "size": "", - }, - "es6.string.includes.js": Object { - "size": "", - }, - "es6.string.iterator.js": Object { - "size": "", - }, - "es6.string.raw.js": Object { - "size": "", - }, - "es6.string.repeat.js": Object { - "size": "", - }, - "es6.string.starts-with.js": Object { - "size": "", - }, - "es6.string.trim.js": Object { - "size": "", - }, - "es6.symbol.js": Object { - "size": "", - }, - "es6.typed.array-buffer.js": Object { - "size": "", - }, - "es6.typed.data-view.js": Object { - "size": "", - }, - "es6.typed.float32-array.js": Object { - "size": "", - }, - "es6.typed.float64-array.js": Object { - "size": "", - }, - "es6.typed.int16-array.js": Object { - "size": "", - }, - "es6.typed.int32-array.js": Object { - "size": "", - }, - "es6.typed.int8-array.js": Object { - "size": "", - }, - "es6.typed.uint16-array.js": Object { - "size": "", - }, - "es6.typed.uint32-array.js": Object { - "size": "", - }, - "es6.typed.uint8-array.js": Object { - "size": "", - }, - "es6.typed.uint8-clamped-array.js": Object { - "size": "", - }, - "es6.weak-map.js": Object { - "size": "", - }, - "es6.weak-set.js": Object { - "size": "", - }, - "es7.array.includes.js": Object { - "size": "", - }, - "es7.map.to-json.js": Object { - "size": "", - }, - "es7.object.entries.js": Object { - "size": "", - }, - "es7.object.get-own-property-descriptors.js": Object { - "size": "", - }, - "es7.object.values.js": Object { - "size": "", - }, - "es7.regexp.escape.js": Object { - "size": "", - }, - "es7.set.to-json.js": Object { - "size": "", - }, - "es7.string.at.js": Object { - "size": "", - }, - "es7.string.pad-left.js": Object { - "size": "", - }, - "es7.string.pad-right.js": Object { - "size": "", - }, - "es7.string.trim-left.js": Object { - "size": "", - }, - "es7.string.trim-right.js": Object { - "size": "", - }, - "js.array.statics.js": Object { - "size": "", - }, - "library": Object { - "files": Object { - "$.add-to-unscopables.js": Object { - "size": "", - }, - "$.collection.js": Object { - "size": "", - }, - "$.export.js": Object { - "size": "", - }, - "$.library.js": Object { - "size": "", - }, - "$.path.js": Object { - "size": "", - }, - "$.redefine.js": Object { - "size": "", - }, - "$.set-species.js": Object { - "size": "", - }, - "es6.date.to-string.js": Object { - "size": "", - }, - "es6.function.name.js": Object { - "size": "", - }, - "es6.number.constructor.js": Object { - "size": "", - }, - "es6.object.to-string.js": Object { - "size": "", - }, - "es6.regexp.constructor.js": Object { - "size": "", - }, - "es6.regexp.flags.js": Object { - "size": "", - }, - "es6.regexp.match.js": Object { - "size": "", - }, - "es6.regexp.replace.js": Object { - "size": "", - }, - "es6.regexp.search.js": Object { - "size": "", - }, - "es6.regexp.split.js": Object { - "size": "", - }, - "web.dom.iterable.js": Object { - "size": "", - }, - }, - }, - "web.dom.iterable.js": Object { - "size": "", - }, - "web.immediate.js": Object { - "size": "", - }, - "web.timers.js": Object { - "size": "", - }, - }, - }, - "package.json": Object { - "size": "", - }, - "shim.js": Object { - "size": "", - }, - "web": Object { - "files": Object { - "dom.js": Object { - "size": "", - }, - "immediate.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "timers.js": Object { - "size": "", - }, - }, - }, - }, - }, - "debug": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "dist": Object { - "files": Object { - "debug.js": Object { - "size": "", - }, - }, - }, - "package.json": Object { - "size": "", - }, - "src": Object { - "files": Object { - "browser.js": Object { - "size": "", - }, - "common.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "node.js": Object { - "size": "", - }, - }, - }, - }, - }, - "encoding": Object { - "files": Object { - ".prettierrc.js": Object { - "size": "", - }, - "LICENSE": Object { - "size": "", - }, - "lib": Object { - "files": Object { - "encoding.js": Object { - "size": "", - }, - }, - }, - "package.json": Object { - "size": "", - }, - }, - }, - "fbjs": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "flow": Object { - "files": Object { - "lib": Object { - "files": Object { - "dev.js": Object { - "size": "", - }, - }, - }, - }, - }, - "index.js": Object { - "size": "", - }, - "lib": Object { - "files": Object { - "CSSCore.js": Object { - "size": "", - }, - "CSSCore.js.flow": Object { - "size": "", - }, - "DataTransfer.js": Object { - "size": "", - }, - "DataTransfer.js.flow": Object { - "size": "", - }, - "Deferred.js": Object { - "size": "", - }, - "Deferred.js.flow": Object { - "size": "", - }, - "ErrorUtils.js": Object { - "size": "", - }, - "ErrorUtils.js.flow": Object { - "size": "", - }, - "EventListener.js": Object { - "size": "", - }, - "EventListener.js.flow": Object { - "size": "", - }, - "ExecutionEnvironment.js": Object { - "size": "", - }, - "ExecutionEnvironment.js.flow": Object { - "size": "", - }, - "Keys.js": Object { - "size": "", - }, - "Keys.js.flow": Object { - "size": "", - }, - "Map.js": Object { - "size": "", - }, - "Map.js.flow": Object { - "size": "", - }, - "PhotosMimeType.js": Object { - "size": "", - }, - "PhotosMimeType.js.flow": Object { - "size": "", - }, - "Promise.js": Object { - "size": "", - }, - "Promise.js.flow": Object { - "size": "", - }, - "Promise.native.js": Object { - "size": "", - }, - "Promise.native.js.flow": Object { - "size": "", - }, - "PromiseMap.js": Object { - "size": "", - }, - "PromiseMap.js.flow": Object { - "size": "", - }, - "Scroll.js": Object { - "size": "", - }, - "Scroll.js.flow": Object { - "size": "", - }, - "Set.js": Object { - "size": "", - }, - "Set.js.flow": Object { - "size": "", - }, - "Style.js": Object { - "size": "", - }, - "Style.js.flow": Object { - "size": "", - }, - "TokenizeUtil.js": Object { - "size": "", - }, - "TokenizeUtil.js.flow": Object { - "size": "", - }, - "TouchEventUtils.js": Object { - "size": "", - }, - "TouchEventUtils.js.flow": Object { - "size": "", - }, - "URI.js": Object { - "size": "", - }, - "URI.js.flow": Object { - "size": "", - }, - "UnicodeBidi.js": Object { - "size": "", - }, - "UnicodeBidi.js.flow": Object { - "size": "", - }, - "UnicodeBidiDirection.js": Object { - "size": "", - }, - "UnicodeBidiDirection.js.flow": Object { - "size": "", - }, - "UnicodeBidiService.js": Object { - "size": "", - }, - "UnicodeBidiService.js.flow": Object { - "size": "", - }, - "UnicodeCJK.js": Object { - "size": "", - }, - "UnicodeCJK.js.flow": Object { - "size": "", - }, - "UnicodeHangulKorean.js": Object { - "size": "", - }, - "UnicodeHangulKorean.js.flow": Object { - "size": "", - }, - "UnicodeUtils.js": Object { - "size": "", - }, - "UnicodeUtils.js.flow": Object { - "size": "", - }, - "UnicodeUtilsExtra.js": Object { - "size": "", - }, - "UnicodeUtilsExtra.js.flow": Object { - "size": "", - }, - "UserAgent.js": Object { - "size": "", - }, - "UserAgent.js.flow": Object { - "size": "", - }, - "UserAgentData.js": Object { - "size": "", - }, - "UserAgentData.js.flow": Object { - "size": "", - }, - "VersionRange.js": Object { - "size": "", - }, - "VersionRange.js.flow": Object { - "size": "", - }, - "__mocks__": Object { - "files": Object { - "ErrorUtils.js": Object { - "size": "", - }, - "base62.js": Object { - "size": "", - }, - "crc32.js": Object { - "size": "", - }, - "fetch.js": Object { - "size": "", - }, - "fetchWithRetries.js": Object { - "size": "", - }, - "nullthrows.js": Object { - "size": "", - }, - }, - }, - "_shouldPolyfillES6Collection.js": Object { - "size": "", - }, - "_shouldPolyfillES6Collection.js.flow": Object { - "size": "", - }, - "areEqual.js": Object { - "size": "", - }, - "areEqual.js.flow": Object { - "size": "", - }, - "base62.js": Object { - "size": "", - }, - "base62.js.flow": Object { - "size": "", - }, - "camelize.js": Object { - "size": "", - }, - "camelize.js.flow": Object { - "size": "", - }, - "camelizeStyleName.js": Object { - "size": "", - }, - "camelizeStyleName.js.flow": Object { - "size": "", - }, - "compactArray.js": Object { - "size": "", - }, - "compactArray.js.flow": Object { - "size": "", - }, - "concatAllArray.js": Object { - "size": "", - }, - "concatAllArray.js.flow": Object { - "size": "", - }, - "containsNode.js": Object { - "size": "", - }, - "containsNode.js.flow": Object { - "size": "", - }, - "countDistinct.js": Object { - "size": "", - }, - "countDistinct.js.flow": Object { - "size": "", - }, - "crc32.js": Object { - "size": "", - }, - "crc32.js.flow": Object { - "size": "", - }, - "createArrayFromMixed.js": Object { - "size": "", - }, - "createArrayFromMixed.js.flow": Object { - "size": "", - }, - "createNodesFromMarkup.js": Object { - "size": "", - }, - "createNodesFromMarkup.js.flow": Object { - "size": "", - }, - "cx.js": Object { - "size": "", - }, - "cx.js.flow": Object { - "size": "", - }, - "distinctArray.js": Object { - "size": "", - }, - "distinctArray.js.flow": Object { - "size": "", - }, - "emptyFunction.js": Object { - "size": "", - }, - "emptyFunction.js.flow": Object { - "size": "", - }, - "emptyObject.js": Object { - "size": "", - }, - "emptyObject.js.flow": Object { - "size": "", - }, - "enumerate.js": Object { - "size": "", - }, - "enumerate.js.flow": Object { - "size": "", - }, - "equalsIterable.js": Object { - "size": "", - }, - "equalsIterable.js.flow": Object { - "size": "", - }, - "equalsSet.js": Object { - "size": "", - }, - "equalsSet.js.flow": Object { - "size": "", - }, - "everyObject.js": Object { - "size": "", - }, - "everyObject.js.flow": Object { - "size": "", - }, - "everySet.js": Object { - "size": "", - }, - "everySet.js.flow": Object { - "size": "", - }, - "fetch.js": Object { - "size": "", - }, - "fetch.js.flow": Object { - "size": "", - }, - "fetchWithRetries.js": Object { - "size": "", - }, - "fetchWithRetries.js.flow": Object { - "size": "", - }, - "filterObject.js": Object { - "size": "", - }, - "filterObject.js.flow": Object { - "size": "", - }, - "flatMapArray.js": Object { - "size": "", - }, - "flatMapArray.js.flow": Object { - "size": "", - }, - "flattenArray.js": Object { - "size": "", - }, - "flattenArray.js.flow": Object { - "size": "", - }, - "focusNode.js": Object { - "size": "", - }, - "focusNode.js.flow": Object { - "size": "", - }, - "forEachObject.js": Object { - "size": "", - }, - "forEachObject.js.flow": Object { - "size": "", - }, - "getActiveElement.js": Object { - "size": "", - }, - "getActiveElement.js.flow": Object { - "size": "", - }, - "getDocumentScrollElement.js": Object { - "size": "", - }, - "getDocumentScrollElement.js.flow": Object { - "size": "", - }, - "getElementPosition.js": Object { - "size": "", - }, - "getElementPosition.js.flow": Object { - "size": "", - }, - "getElementRect.js": Object { - "size": "", - }, - "getElementRect.js.flow": Object { - "size": "", - }, - "getMarkupWrap.js": Object { - "size": "", - }, - "getMarkupWrap.js.flow": Object { - "size": "", - }, - "getScrollPosition.js": Object { - "size": "", - }, - "getScrollPosition.js.flow": Object { - "size": "", - }, - "getStyleProperty.js": Object { - "size": "", - }, - "getStyleProperty.js.flow": Object { - "size": "", - }, - "getUnboundedScrollPosition.js": Object { - "size": "", - }, - "getUnboundedScrollPosition.js.flow": Object { - "size": "", - }, - "getViewportDimensions.js": Object { - "size": "", - }, - "getViewportDimensions.js.flow": Object { - "size": "", - }, - "groupArray.js": Object { - "size": "", - }, - "groupArray.js.flow": Object { - "size": "", - }, - "hyphenate.js": Object { - "size": "", - }, - "hyphenate.js.flow": Object { - "size": "", - }, - "hyphenateStyleName.js": Object { - "size": "", - }, - "hyphenateStyleName.js.flow": Object { - "size": "", - }, - "invariant.js": Object { - "size": "", - }, - "invariant.js.flow": Object { - "size": "", - }, - "isEmpty.js": Object { - "size": "", - }, - "isEmpty.js.flow": Object { - "size": "", - }, - "isNode.js": Object { - "size": "", - }, - "isNode.js.flow": Object { - "size": "", - }, - "isTextNode.js": Object { - "size": "", - }, - "isTextNode.js.flow": Object { - "size": "", - }, - "joinClasses.js": Object { - "size": "", - }, - "joinClasses.js.flow": Object { - "size": "", - }, - "keyMirror.js": Object { - "size": "", - }, - "keyMirror.js.flow": Object { - "size": "", - }, - "keyMirrorRecursive.js": Object { - "size": "", - }, - "keyMirrorRecursive.js.flow": Object { - "size": "", - }, - "keyOf.js": Object { - "size": "", - }, - "keyOf.js.flow": Object { - "size": "", - }, - "mapObject.js": Object { - "size": "", - }, - "mapObject.js.flow": Object { - "size": "", - }, - "maxBy.js": Object { - "size": "", - }, - "maxBy.js.flow": Object { - "size": "", - }, - "memoizeStringOnly.js": Object { - "size": "", - }, - "memoizeStringOnly.js.flow": Object { - "size": "", - }, - "minBy.js": Object { - "size": "", - }, - "minBy.js.flow": Object { - "size": "", - }, - "monitorCodeUse.js": Object { - "size": "", - }, - "monitorCodeUse.js.flow": Object { - "size": "", - }, - "nativeRequestAnimationFrame.js": Object { - "size": "", - }, - "nativeRequestAnimationFrame.js.flow": Object { - "size": "", - }, - "nullthrows.js": Object { - "size": "", - }, - "nullthrows.js.flow": Object { - "size": "", - }, - "partitionArray.js": Object { - "size": "", - }, - "partitionArray.js.flow": Object { - "size": "", - }, - "partitionObject.js": Object { - "size": "", - }, - "partitionObject.js.flow": Object { - "size": "", - }, - "partitionObjectByKey.js": Object { - "size": "", - }, - "partitionObjectByKey.js.flow": Object { - "size": "", - }, - "performance.js": Object { - "size": "", - }, - "performance.js.flow": Object { - "size": "", - }, - "performanceNow.js": Object { - "size": "", - }, - "performanceNow.js.flow": Object { - "size": "", - }, - "removeFromArray.js": Object { - "size": "", - }, - "removeFromArray.js.flow": Object { - "size": "", - }, - "requestAnimationFrame.js": Object { - "size": "", - }, - "requestAnimationFrame.js.flow": Object { - "size": "", - }, - "resolveImmediate.js": Object { - "size": "", - }, - "resolveImmediate.js.flow": Object { - "size": "", - }, - "setImmediate.js": Object { - "size": "", - }, - "setImmediate.js.flow": Object { - "size": "", - }, - "shallowEqual.js": Object { - "size": "", - }, - "shallowEqual.js.flow": Object { - "size": "", - }, - "someObject.js": Object { - "size": "", - }, - "someObject.js.flow": Object { - "size": "", - }, - "someSet.js": Object { - "size": "", - }, - "someSet.js.flow": Object { - "size": "", - }, - "sprintf.js": Object { - "size": "", - }, - "sprintf.js.flow": Object { - "size": "", - }, - "warning.js": Object { - "size": "", - }, - "warning.js.flow": Object { - "size": "", - }, - "xhrSimpleDataSerializer.js": Object { - "size": "", - }, - "xhrSimpleDataSerializer.js.flow": Object { - "size": "", - }, - }, - }, - "module-map.json": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - }, - }, - "iconv-lite": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "encodings": Object { - "files": Object { - "dbcs-codec.js": Object { - "size": "", - }, - "dbcs-data.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "internal.js": Object { - "size": "", - }, - "sbcs-codec.js": Object { - "size": "", - }, - "sbcs-data-generated.js": Object { - "size": "", - }, - "sbcs-data.js": Object { - "size": "", - }, - "tables": Object { - "files": Object { - "big5-added.json": Object { - "size": "", - }, - "cp936.json": Object { - "size": "", - }, - "cp949.json": Object { - "size": "", - }, - "cp950.json": Object { - "size": "", - }, - "eucjp.json": Object { - "size": "", - }, - "gb18030-ranges.json": Object { - "size": "", - }, - "gbk-added.json": Object { - "size": "", - }, - "shiftjis.json": Object { - "size": "", - }, - }, - }, - "utf16.js": Object { - "size": "", - }, - "utf32.js": Object { - "size": "", - }, - "utf7.js": Object { - "size": "", - }, - }, - }, - "lib": Object { - "files": Object { - "bom-handling.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "streams.js": Object { - "size": "", - }, - }, - }, - "package.json": Object { - "size": "", - }, - }, - }, - "is-stream": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - "license": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - }, - }, - "isomorphic-fetch": Object { - "files": Object { - ".editorconfig": Object { - "size": "", - }, - "LICENSE": Object { - "size": "", - }, - "bower.json": Object { - "size": "", - }, - "fetch-bower.js": Object { - "size": "", - }, - "fetch-npm-browserify.js": Object { - "size": "", - }, - "fetch-npm-node.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - }, - }, - "js-tokens": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - }, - }, - "lodash": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "_DataView.js": Object { - "size": "", - }, - "_Hash.js": Object { - "size": "", - }, - "_LazyWrapper.js": Object { - "size": "", - }, - "_ListCache.js": Object { - "size": "", - }, - "_LodashWrapper.js": Object { - "size": "", - }, - "_Map.js": Object { - "size": "", - }, - "_MapCache.js": Object { - "size": "", - }, - "_Promise.js": Object { - "size": "", - }, - "_Set.js": Object { - "size": "", - }, - "_SetCache.js": Object { - "size": "", - }, - "_Stack.js": Object { - "size": "", - }, - "_Symbol.js": Object { - "size": "", - }, - "_Uint8Array.js": Object { - "size": "", - }, - "_WeakMap.js": Object { - "size": "", - }, - "_apply.js": Object { - "size": "", - }, - "_arrayAggregator.js": Object { - "size": "", - }, - "_arrayEach.js": Object { - "size": "", - }, - "_arrayEachRight.js": Object { - "size": "", - }, - "_arrayEvery.js": Object { - "size": "", - }, - "_arrayFilter.js": Object { - "size": "", - }, - "_arrayIncludes.js": Object { - "size": "", - }, - "_arrayIncludesWith.js": Object { - "size": "", - }, - "_arrayLikeKeys.js": Object { - "size": "", - }, - "_arrayMap.js": Object { - "size": "", - }, - "_arrayPush.js": Object { - "size": "", - }, - "_arrayReduce.js": Object { - "size": "", - }, - "_arrayReduceRight.js": Object { - "size": "", - }, - "_arraySample.js": Object { - "size": "", - }, - "_arraySampleSize.js": Object { - "size": "", - }, - "_arrayShuffle.js": Object { - "size": "", - }, - "_arraySome.js": Object { - "size": "", - }, - "_asciiSize.js": Object { - "size": "", - }, - "_asciiToArray.js": Object { - "size": "", - }, - "_asciiWords.js": Object { - "size": "", - }, - "_assignMergeValue.js": Object { - "size": "", - }, - "_assignValue.js": Object { - "size": "", - }, - "_assocIndexOf.js": Object { - "size": "", - }, - "_baseAggregator.js": Object { - "size": "", - }, - "_baseAssign.js": Object { - "size": "", - }, - "_baseAssignIn.js": Object { - "size": "", - }, - "_baseAssignValue.js": Object { - "size": "", - }, - "_baseAt.js": Object { - "size": "", - }, - "_baseClamp.js": Object { - "size": "", - }, - "_baseClone.js": Object { - "size": "", - }, - "_baseConforms.js": Object { - "size": "", - }, - "_baseConformsTo.js": Object { - "size": "", - }, - "_baseCreate.js": Object { - "size": "", - }, - "_baseDelay.js": Object { - "size": "", - }, - "_baseDifference.js": Object { - "size": "", - }, - "_baseEach.js": Object { - "size": "", - }, - "_baseEachRight.js": Object { - "size": "", - }, - "_baseEvery.js": Object { - "size": "", - }, - "_baseExtremum.js": Object { - "size": "", - }, - "_baseFill.js": Object { - "size": "", - }, - "_baseFilter.js": Object { - "size": "", - }, - "_baseFindIndex.js": Object { - "size": "", - }, - "_baseFindKey.js": Object { - "size": "", - }, - "_baseFlatten.js": Object { - "size": "", - }, - "_baseFor.js": Object { - "size": "", - }, - "_baseForOwn.js": Object { - "size": "", - }, - "_baseForOwnRight.js": Object { - "size": "", - }, - "_baseForRight.js": Object { - "size": "", - }, - "_baseFunctions.js": Object { - "size": "", - }, - "_baseGet.js": Object { - "size": "", - }, - "_baseGetAllKeys.js": Object { - "size": "", - }, - "_baseGetTag.js": Object { - "size": "", - }, - "_baseGt.js": Object { - "size": "", - }, - "_baseHas.js": Object { - "size": "", - }, - "_baseHasIn.js": Object { - "size": "", - }, - "_baseInRange.js": Object { - "size": "", - }, - "_baseIndexOf.js": Object { - "size": "", - }, - "_baseIndexOfWith.js": Object { - "size": "", - }, - "_baseIntersection.js": Object { - "size": "", - }, - "_baseInverter.js": Object { - "size": "", - }, - "_baseInvoke.js": Object { - "size": "", - }, - "_baseIsArguments.js": Object { - "size": "", - }, - "_baseIsArrayBuffer.js": Object { - "size": "", - }, - "_baseIsDate.js": Object { - "size": "", - }, - "_baseIsEqual.js": Object { - "size": "", - }, - "_baseIsEqualDeep.js": Object { - "size": "", - }, - "_baseIsMap.js": Object { - "size": "", - }, - "_baseIsMatch.js": Object { - "size": "", - }, - "_baseIsNaN.js": Object { - "size": "", - }, - "_baseIsNative.js": Object { - "size": "", - }, - "_baseIsRegExp.js": Object { - "size": "", - }, - "_baseIsSet.js": Object { - "size": "", - }, - "_baseIsTypedArray.js": Object { - "size": "", - }, - "_baseIteratee.js": Object { - "size": "", - }, - "_baseKeys.js": Object { - "size": "", - }, - "_baseKeysIn.js": Object { - "size": "", - }, - "_baseLodash.js": Object { - "size": "", - }, - "_baseLt.js": Object { - "size": "", - }, - "_baseMap.js": Object { - "size": "", - }, - "_baseMatches.js": Object { - "size": "", - }, - "_baseMatchesProperty.js": Object { - "size": "", - }, - "_baseMean.js": Object { - "size": "", - }, - "_baseMerge.js": Object { - "size": "", - }, - "_baseMergeDeep.js": Object { - "size": "", - }, - "_baseNth.js": Object { - "size": "", - }, - "_baseOrderBy.js": Object { - "size": "", - }, - "_basePick.js": Object { - "size": "", - }, - "_basePickBy.js": Object { - "size": "", - }, - "_baseProperty.js": Object { - "size": "", - }, - "_basePropertyDeep.js": Object { - "size": "", - }, - "_basePropertyOf.js": Object { - "size": "", - }, - "_basePullAll.js": Object { - "size": "", - }, - "_basePullAt.js": Object { - "size": "", - }, - "_baseRandom.js": Object { - "size": "", - }, - "_baseRange.js": Object { - "size": "", - }, - "_baseReduce.js": Object { - "size": "", - }, - "_baseRepeat.js": Object { - "size": "", - }, - "_baseRest.js": Object { - "size": "", - }, - "_baseSample.js": Object { - "size": "", - }, - "_baseSampleSize.js": Object { - "size": "", - }, - "_baseSet.js": Object { - "size": "", - }, - "_baseSetData.js": Object { - "size": "", - }, - "_baseSetToString.js": Object { - "size": "", - }, - "_baseShuffle.js": Object { - "size": "", - }, - "_baseSlice.js": Object { - "size": "", - }, - "_baseSome.js": Object { - "size": "", - }, - "_baseSortBy.js": Object { - "size": "", - }, - "_baseSortedIndex.js": Object { - "size": "", - }, - "_baseSortedIndexBy.js": Object { - "size": "", - }, - "_baseSortedUniq.js": Object { - "size": "", - }, - "_baseSum.js": Object { - "size": "", - }, - "_baseTimes.js": Object { - "size": "", - }, - "_baseToNumber.js": Object { - "size": "", - }, - "_baseToPairs.js": Object { - "size": "", - }, - "_baseToString.js": Object { - "size": "", - }, - "_baseTrim.js": Object { - "size": "", - }, - "_baseUnary.js": Object { - "size": "", - }, - "_baseUniq.js": Object { - "size": "", - }, - "_baseUnset.js": Object { - "size": "", - }, - "_baseUpdate.js": Object { - "size": "", - }, - "_baseValues.js": Object { - "size": "", - }, - "_baseWhile.js": Object { - "size": "", - }, - "_baseWrapperValue.js": Object { - "size": "", - }, - "_baseXor.js": Object { - "size": "", - }, - "_baseZipObject.js": Object { - "size": "", - }, - "_cacheHas.js": Object { - "size": "", - }, - "_castArrayLikeObject.js": Object { - "size": "", - }, - "_castFunction.js": Object { - "size": "", - }, - "_castPath.js": Object { - "size": "", - }, - "_castRest.js": Object { - "size": "", - }, - "_castSlice.js": Object { - "size": "", - }, - "_charsEndIndex.js": Object { - "size": "", - }, - "_charsStartIndex.js": Object { - "size": "", - }, - "_cloneArrayBuffer.js": Object { - "size": "", - }, - "_cloneBuffer.js": Object { - "size": "", - }, - "_cloneDataView.js": Object { - "size": "", - }, - "_cloneRegExp.js": Object { - "size": "", - }, - "_cloneSymbol.js": Object { - "size": "", - }, - "_cloneTypedArray.js": Object { - "size": "", - }, - "_compareAscending.js": Object { - "size": "", - }, - "_compareMultiple.js": Object { - "size": "", - }, - "_composeArgs.js": Object { - "size": "", - }, - "_composeArgsRight.js": Object { - "size": "", - }, - "_copyArray.js": Object { - "size": "", - }, - "_copyObject.js": Object { - "size": "", - }, - "_copySymbols.js": Object { - "size": "", - }, - "_copySymbolsIn.js": Object { - "size": "", - }, - "_coreJsData.js": Object { - "size": "", - }, - "_countHolders.js": Object { - "size": "", - }, - "_createAggregator.js": Object { - "size": "", - }, - "_createAssigner.js": Object { - "size": "", - }, - "_createBaseEach.js": Object { - "size": "", - }, - "_createBaseFor.js": Object { - "size": "", - }, - "_createBind.js": Object { - "size": "", - }, - "_createCaseFirst.js": Object { - "size": "", - }, - "_createCompounder.js": Object { - "size": "", - }, - "_createCtor.js": Object { - "size": "", - }, - "_createCurry.js": Object { - "size": "", - }, - "_createFind.js": Object { - "size": "", - }, - "_createFlow.js": Object { - "size": "", - }, - "_createHybrid.js": Object { - "size": "", - }, - "_createInverter.js": Object { - "size": "", - }, - "_createMathOperation.js": Object { - "size": "", - }, - "_createOver.js": Object { - "size": "", - }, - "_createPadding.js": Object { - "size": "", - }, - "_createPartial.js": Object { - "size": "", - }, - "_createRange.js": Object { - "size": "", - }, - "_createRecurry.js": Object { - "size": "", - }, - "_createRelationalOperation.js": Object { - "size": "", - }, - "_createRound.js": Object { - "size": "", - }, - "_createSet.js": Object { - "size": "", - }, - "_createToPairs.js": Object { - "size": "", - }, - "_createWrap.js": Object { - "size": "", - }, - "_customDefaultsAssignIn.js": Object { - "size": "", - }, - "_customDefaultsMerge.js": Object { - "size": "", - }, - "_customOmitClone.js": Object { - "size": "", - }, - "_deburrLetter.js": Object { - "size": "", - }, - "_defineProperty.js": Object { - "size": "", - }, - "_equalArrays.js": Object { - "size": "", - }, - "_equalByTag.js": Object { - "size": "", - }, - "_equalObjects.js": Object { - "size": "", - }, - "_escapeHtmlChar.js": Object { - "size": "", - }, - "_escapeStringChar.js": Object { - "size": "", - }, - "_flatRest.js": Object { - "size": "", - }, - "_freeGlobal.js": Object { - "size": "", - }, - "_getAllKeys.js": Object { - "size": "", - }, - "_getAllKeysIn.js": Object { - "size": "", - }, - "_getData.js": Object { - "size": "", - }, - "_getFuncName.js": Object { - "size": "", - }, - "_getHolder.js": Object { - "size": "", - }, - "_getMapData.js": Object { - "size": "", - }, - "_getMatchData.js": Object { - "size": "", - }, - "_getNative.js": Object { - "size": "", - }, - "_getPrototype.js": Object { - "size": "", - }, - "_getRawTag.js": Object { - "size": "", - }, - "_getSymbols.js": Object { - "size": "", - }, - "_getSymbolsIn.js": Object { - "size": "", - }, - "_getTag.js": Object { - "size": "", - }, - "_getValue.js": Object { - "size": "", - }, - "_getView.js": Object { - "size": "", - }, - "_getWrapDetails.js": Object { - "size": "", - }, - "_hasPath.js": Object { - "size": "", - }, - "_hasUnicode.js": Object { - "size": "", - }, - "_hasUnicodeWord.js": Object { - "size": "", - }, - "_hashClear.js": Object { - "size": "", - }, - "_hashDelete.js": Object { - "size": "", - }, - "_hashGet.js": Object { - "size": "", - }, - "_hashHas.js": Object { - "size": "", - }, - "_hashSet.js": Object { - "size": "", - }, - "_initCloneArray.js": Object { - "size": "", - }, - "_initCloneByTag.js": Object { - "size": "", - }, - "_initCloneObject.js": Object { - "size": "", - }, - "_insertWrapDetails.js": Object { - "size": "", - }, - "_isFlattenable.js": Object { - "size": "", - }, - "_isIndex.js": Object { - "size": "", - }, - "_isIterateeCall.js": Object { - "size": "", - }, - "_isKey.js": Object { - "size": "", - }, - "_isKeyable.js": Object { - "size": "", - }, - "_isLaziable.js": Object { - "size": "", - }, - "_isMaskable.js": Object { - "size": "", - }, - "_isMasked.js": Object { - "size": "", - }, - "_isPrototype.js": Object { - "size": "", - }, - "_isStrictComparable.js": Object { - "size": "", - }, - "_iteratorToArray.js": Object { - "size": "", - }, - "_lazyClone.js": Object { - "size": "", - }, - "_lazyReverse.js": Object { - "size": "", - }, - "_lazyValue.js": Object { - "size": "", - }, - "_listCacheClear.js": Object { - "size": "", - }, - "_listCacheDelete.js": Object { - "size": "", - }, - "_listCacheGet.js": Object { - "size": "", - }, - "_listCacheHas.js": Object { - "size": "", - }, - "_listCacheSet.js": Object { - "size": "", - }, - "_mapCacheClear.js": Object { - "size": "", - }, - "_mapCacheDelete.js": Object { - "size": "", - }, - "_mapCacheGet.js": Object { - "size": "", - }, - "_mapCacheHas.js": Object { - "size": "", - }, - "_mapCacheSet.js": Object { - "size": "", - }, - "_mapToArray.js": Object { - "size": "", - }, - "_matchesStrictComparable.js": Object { - "size": "", - }, - "_memoizeCapped.js": Object { - "size": "", - }, - "_mergeData.js": Object { - "size": "", - }, - "_metaMap.js": Object { - "size": "", - }, - "_nativeCreate.js": Object { - "size": "", - }, - "_nativeKeys.js": Object { - "size": "", - }, - "_nativeKeysIn.js": Object { - "size": "", - }, - "_nodeUtil.js": Object { - "size": "", - }, - "_objectToString.js": Object { - "size": "", - }, - "_overArg.js": Object { - "size": "", - }, - "_overRest.js": Object { - "size": "", - }, - "_parent.js": Object { - "size": "", - }, - "_reEscape.js": Object { - "size": "", - }, - "_reEvaluate.js": Object { - "size": "", - }, - "_reInterpolate.js": Object { - "size": "", - }, - "_realNames.js": Object { - "size": "", - }, - "_reorder.js": Object { - "size": "", - }, - "_replaceHolders.js": Object { - "size": "", - }, - "_root.js": Object { - "size": "", - }, - "_safeGet.js": Object { - "size": "", - }, - "_setCacheAdd.js": Object { - "size": "", - }, - "_setCacheHas.js": Object { - "size": "", - }, - "_setData.js": Object { - "size": "", - }, - "_setToArray.js": Object { - "size": "", - }, - "_setToPairs.js": Object { - "size": "", - }, - "_setToString.js": Object { - "size": "", - }, - "_setWrapToString.js": Object { - "size": "", - }, - "_shortOut.js": Object { - "size": "", - }, - "_shuffleSelf.js": Object { - "size": "", - }, - "_stackClear.js": Object { - "size": "", - }, - "_stackDelete.js": Object { - "size": "", - }, - "_stackGet.js": Object { - "size": "", - }, - "_stackHas.js": Object { - "size": "", - }, - "_stackSet.js": Object { - "size": "", - }, - "_strictIndexOf.js": Object { - "size": "", - }, - "_strictLastIndexOf.js": Object { - "size": "", - }, - "_stringSize.js": Object { - "size": "", - }, - "_stringToArray.js": Object { - "size": "", - }, - "_stringToPath.js": Object { - "size": "", - }, - "_toKey.js": Object { - "size": "", - }, - "_toSource.js": Object { - "size": "", - }, - "_trimmedEndIndex.js": Object { - "size": "", - }, - "_unescapeHtmlChar.js": Object { - "size": "", - }, - "_unicodeSize.js": Object { - "size": "", - }, - "_unicodeToArray.js": Object { - "size": "", - }, - "_unicodeWords.js": Object { - "size": "", - }, - "_updateWrapDetails.js": Object { - "size": "", - }, - "_wrapperClone.js": Object { - "size": "", - }, - "add.js": Object { - "size": "", - }, - "after.js": Object { - "size": "", - }, - "array.js": Object { - "size": "", - }, - "ary.js": Object { - "size": "", - }, - "assign.js": Object { - "size": "", - }, - "assignIn.js": Object { - "size": "", - }, - "assignInWith.js": Object { - "size": "", - }, - "assignWith.js": Object { - "size": "", - }, - "at.js": Object { - "size": "", - }, - "attempt.js": Object { - "size": "", - }, - "before.js": Object { - "size": "", - }, - "bind.js": Object { - "size": "", - }, - "bindAll.js": Object { - "size": "", - }, - "bindKey.js": Object { - "size": "", - }, - "camelCase.js": Object { - "size": "", - }, - "capitalize.js": Object { - "size": "", - }, - "castArray.js": Object { - "size": "", - }, - "ceil.js": Object { - "size": "", - }, - "chain.js": Object { - "size": "", - }, - "chunk.js": Object { - "size": "", - }, - "clamp.js": Object { - "size": "", - }, - "clone.js": Object { - "size": "", - }, - "cloneDeep.js": Object { - "size": "", - }, - "cloneDeepWith.js": Object { - "size": "", - }, - "cloneWith.js": Object { - "size": "", - }, - "collection.js": Object { - "size": "", - }, - "commit.js": Object { - "size": "", - }, - "compact.js": Object { - "size": "", - }, - "concat.js": Object { - "size": "", - }, - "cond.js": Object { - "size": "", - }, - "conforms.js": Object { - "size": "", - }, - "conformsTo.js": Object { - "size": "", - }, - "constant.js": Object { - "size": "", - }, - "core.js": Object { - "size": "", - }, - "core.min.js": Object { - "size": "", - }, - "countBy.js": Object { - "size": "", - }, - "create.js": Object { - "size": "", - }, - "curry.js": Object { - "size": "", - }, - "curryRight.js": Object { - "size": "", - }, - "date.js": Object { - "size": "", - }, - "debounce.js": Object { - "size": "", - }, - "deburr.js": Object { - "size": "", - }, - "defaultTo.js": Object { - "size": "", - }, - "defaults.js": Object { - "size": "", - }, - "defaultsDeep.js": Object { - "size": "", - }, - "defer.js": Object { - "size": "", - }, - "delay.js": Object { - "size": "", - }, - "difference.js": Object { - "size": "", - }, - "differenceBy.js": Object { - "size": "", - }, - "differenceWith.js": Object { - "size": "", - }, - "divide.js": Object { - "size": "", - }, - "drop.js": Object { - "size": "", - }, - "dropRight.js": Object { - "size": "", - }, - "dropRightWhile.js": Object { - "size": "", - }, - "dropWhile.js": Object { - "size": "", - }, - "each.js": Object { - "size": "", - }, - "eachRight.js": Object { - "size": "", - }, - "endsWith.js": Object { - "size": "", - }, - "entries.js": Object { - "size": "", - }, - "entriesIn.js": Object { - "size": "", - }, - "eq.js": Object { - "size": "", - }, - "escape.js": Object { - "size": "", - }, - "escapeRegExp.js": Object { - "size": "", - }, - "every.js": Object { - "size": "", - }, - "extend.js": Object { - "size": "", - }, - "extendWith.js": Object { - "size": "", - }, - "fill.js": Object { - "size": "", - }, - "filter.js": Object { - "size": "", - }, - "find.js": Object { - "size": "", - }, - "findIndex.js": Object { - "size": "", - }, - "findKey.js": Object { - "size": "", - }, - "findLast.js": Object { - "size": "", - }, - "findLastIndex.js": Object { - "size": "", - }, - "findLastKey.js": Object { - "size": "", - }, - "first.js": Object { - "size": "", - }, - "flake.lock": Object { - "size": "", - }, - "flake.nix": Object { - "size": "", - }, - "flatMap.js": Object { - "size": "", - }, - "flatMapDeep.js": Object { - "size": "", - }, - "flatMapDepth.js": Object { - "size": "", - }, - "flatten.js": Object { - "size": "", - }, - "flattenDeep.js": Object { - "size": "", - }, - "flattenDepth.js": Object { - "size": "", - }, - "flip.js": Object { - "size": "", - }, - "floor.js": Object { - "size": "", - }, - "flow.js": Object { - "size": "", - }, - "flowRight.js": Object { - "size": "", - }, - "forEach.js": Object { - "size": "", - }, - "forEachRight.js": Object { - "size": "", - }, - "forIn.js": Object { - "size": "", - }, - "forInRight.js": Object { - "size": "", - }, - "forOwn.js": Object { - "size": "", - }, - "forOwnRight.js": Object { - "size": "", - }, - "fp": Object { - "files": Object { - "F.js": Object { - "size": "", - }, - "T.js": Object { - "size": "", - }, - "__.js": Object { - "size": "", - }, - "_baseConvert.js": Object { - "size": "", - }, - "_convertBrowser.js": Object { - "size": "", - }, - "_falseOptions.js": Object { - "size": "", - }, - "_mapping.js": Object { - "size": "", - }, - "_util.js": Object { - "size": "", - }, - "add.js": Object { - "size": "", - }, - "after.js": Object { - "size": "", - }, - "all.js": Object { - "size": "", - }, - "allPass.js": Object { - "size": "", - }, - "always.js": Object { - "size": "", - }, - "any.js": Object { - "size": "", - }, - "anyPass.js": Object { - "size": "", - }, - "apply.js": Object { - "size": "", - }, - "array.js": Object { - "size": "", - }, - "ary.js": Object { - "size": "", - }, - "assign.js": Object { - "size": "", - }, - "assignAll.js": Object { - "size": "", - }, - "assignAllWith.js": Object { - "size": "", - }, - "assignIn.js": Object { - "size": "", - }, - "assignInAll.js": Object { - "size": "", - }, - "assignInAllWith.js": Object { - "size": "", - }, - "assignInWith.js": Object { - "size": "", - }, - "assignWith.js": Object { - "size": "", - }, - "assoc.js": Object { - "size": "", - }, - "assocPath.js": Object { - "size": "", - }, - "at.js": Object { - "size": "", - }, - "attempt.js": Object { - "size": "", - }, - "before.js": Object { - "size": "", - }, - "bind.js": Object { - "size": "", - }, - "bindAll.js": Object { - "size": "", - }, - "bindKey.js": Object { - "size": "", - }, - "camelCase.js": Object { - "size": "", - }, - "capitalize.js": Object { - "size": "", - }, - "castArray.js": Object { - "size": "", - }, - "ceil.js": Object { - "size": "", - }, - "chain.js": Object { - "size": "", - }, - "chunk.js": Object { - "size": "", - }, - "clamp.js": Object { - "size": "", - }, - "clone.js": Object { - "size": "", - }, - "cloneDeep.js": Object { - "size": "", - }, - "cloneDeepWith.js": Object { - "size": "", - }, - "cloneWith.js": Object { - "size": "", - }, - "collection.js": Object { - "size": "", - }, - "commit.js": Object { - "size": "", - }, - "compact.js": Object { - "size": "", - }, - "complement.js": Object { - "size": "", - }, - "compose.js": Object { - "size": "", - }, - "concat.js": Object { - "size": "", - }, - "cond.js": Object { - "size": "", - }, - "conforms.js": Object { - "size": "", - }, - "conformsTo.js": Object { - "size": "", - }, - "constant.js": Object { - "size": "", - }, - "contains.js": Object { - "size": "", - }, - "convert.js": Object { - "size": "", - }, - "countBy.js": Object { - "size": "", - }, - "create.js": Object { - "size": "", - }, - "curry.js": Object { - "size": "", - }, - "curryN.js": Object { - "size": "", - }, - "curryRight.js": Object { - "size": "", - }, - "curryRightN.js": Object { - "size": "", - }, - "date.js": Object { - "size": "", - }, - "debounce.js": Object { - "size": "", - }, - "deburr.js": Object { - "size": "", - }, - "defaultTo.js": Object { - "size": "", - }, - "defaults.js": Object { - "size": "", - }, - "defaultsAll.js": Object { - "size": "", - }, - "defaultsDeep.js": Object { - "size": "", - }, - "defaultsDeepAll.js": Object { - "size": "", - }, - "defer.js": Object { - "size": "", - }, - "delay.js": Object { - "size": "", - }, - "difference.js": Object { - "size": "", - }, - "differenceBy.js": Object { - "size": "", - }, - "differenceWith.js": Object { - "size": "", - }, - "dissoc.js": Object { - "size": "", - }, - "dissocPath.js": Object { - "size": "", - }, - "divide.js": Object { - "size": "", - }, - "drop.js": Object { - "size": "", - }, - "dropLast.js": Object { - "size": "", - }, - "dropLastWhile.js": Object { - "size": "", - }, - "dropRight.js": Object { - "size": "", - }, - "dropRightWhile.js": Object { - "size": "", - }, - "dropWhile.js": Object { - "size": "", - }, - "each.js": Object { - "size": "", - }, - "eachRight.js": Object { - "size": "", - }, - "endsWith.js": Object { - "size": "", - }, - "entries.js": Object { - "size": "", - }, - "entriesIn.js": Object { - "size": "", - }, - "eq.js": Object { - "size": "", - }, - "equals.js": Object { - "size": "", - }, - "escape.js": Object { - "size": "", - }, - "escapeRegExp.js": Object { - "size": "", - }, - "every.js": Object { - "size": "", - }, - "extend.js": Object { - "size": "", - }, - "extendAll.js": Object { - "size": "", - }, - "extendAllWith.js": Object { - "size": "", - }, - "extendWith.js": Object { - "size": "", - }, - "fill.js": Object { - "size": "", - }, - "filter.js": Object { - "size": "", - }, - "find.js": Object { - "size": "", - }, - "findFrom.js": Object { - "size": "", - }, - "findIndex.js": Object { - "size": "", - }, - "findIndexFrom.js": Object { - "size": "", - }, - "findKey.js": Object { - "size": "", - }, - "findLast.js": Object { - "size": "", - }, - "findLastFrom.js": Object { - "size": "", - }, - "findLastIndex.js": Object { - "size": "", - }, - "findLastIndexFrom.js": Object { - "size": "", - }, - "findLastKey.js": Object { - "size": "", - }, - "first.js": Object { - "size": "", - }, - "flatMap.js": Object { - "size": "", - }, - "flatMapDeep.js": Object { - "size": "", - }, - "flatMapDepth.js": Object { - "size": "", - }, - "flatten.js": Object { - "size": "", - }, - "flattenDeep.js": Object { - "size": "", - }, - "flattenDepth.js": Object { - "size": "", - }, - "flip.js": Object { - "size": "", - }, - "floor.js": Object { - "size": "", - }, - "flow.js": Object { - "size": "", - }, - "flowRight.js": Object { - "size": "", - }, - "forEach.js": Object { - "size": "", - }, - "forEachRight.js": Object { - "size": "", - }, - "forIn.js": Object { - "size": "", - }, - "forInRight.js": Object { - "size": "", - }, - "forOwn.js": Object { - "size": "", - }, - "forOwnRight.js": Object { - "size": "", - }, - "fromPairs.js": Object { - "size": "", - }, - "function.js": Object { - "size": "", - }, - "functions.js": Object { - "size": "", - }, - "functionsIn.js": Object { - "size": "", - }, - "get.js": Object { - "size": "", - }, - "getOr.js": Object { - "size": "", - }, - "groupBy.js": Object { - "size": "", - }, - "gt.js": Object { - "size": "", - }, - "gte.js": Object { - "size": "", - }, - "has.js": Object { - "size": "", - }, - "hasIn.js": Object { - "size": "", - }, - "head.js": Object { - "size": "", - }, - "identical.js": Object { - "size": "", - }, - "identity.js": Object { - "size": "", - }, - "inRange.js": Object { - "size": "", - }, - "includes.js": Object { - "size": "", - }, - "includesFrom.js": Object { - "size": "", - }, - "indexBy.js": Object { - "size": "", - }, - "indexOf.js": Object { - "size": "", - }, - "indexOfFrom.js": Object { - "size": "", - }, - "init.js": Object { - "size": "", - }, - "initial.js": Object { - "size": "", - }, - "intersection.js": Object { - "size": "", - }, - "intersectionBy.js": Object { - "size": "", - }, - "intersectionWith.js": Object { - "size": "", - }, - "invert.js": Object { - "size": "", - }, - "invertBy.js": Object { - "size": "", - }, - "invertObj.js": Object { - "size": "", - }, - "invoke.js": Object { - "size": "", - }, - "invokeArgs.js": Object { - "size": "", - }, - "invokeArgsMap.js": Object { - "size": "", - }, - "invokeMap.js": Object { - "size": "", - }, - "isArguments.js": Object { - "size": "", - }, - "isArray.js": Object { - "size": "", - }, - "isArrayBuffer.js": Object { - "size": "", - }, - "isArrayLike.js": Object { - "size": "", - }, - "isArrayLikeObject.js": Object { - "size": "", - }, - "isBoolean.js": Object { - "size": "", - }, - "isBuffer.js": Object { - "size": "", - }, - "isDate.js": Object { - "size": "", - }, - "isElement.js": Object { - "size": "", - }, - "isEmpty.js": Object { - "size": "", - }, - "isEqual.js": Object { - "size": "", - }, - "isEqualWith.js": Object { - "size": "", - }, - "isError.js": Object { - "size": "", - }, - "isFinite.js": Object { - "size": "", - }, - "isFunction.js": Object { - "size": "", - }, - "isInteger.js": Object { - "size": "", - }, - "isLength.js": Object { - "size": "", - }, - "isMap.js": Object { - "size": "", - }, - "isMatch.js": Object { - "size": "", - }, - "isMatchWith.js": Object { - "size": "", - }, - "isNaN.js": Object { - "size": "", - }, - "isNative.js": Object { - "size": "", - }, - "isNil.js": Object { - "size": "", - }, - "isNull.js": Object { - "size": "", - }, - "isNumber.js": Object { - "size": "", - }, - "isObject.js": Object { - "size": "", - }, - "isObjectLike.js": Object { - "size": "", - }, - "isPlainObject.js": Object { - "size": "", - }, - "isRegExp.js": Object { - "size": "", - }, - "isSafeInteger.js": Object { - "size": "", - }, - "isSet.js": Object { - "size": "", - }, - "isString.js": Object { - "size": "", - }, - "isSymbol.js": Object { - "size": "", - }, - "isTypedArray.js": Object { - "size": "", - }, - "isUndefined.js": Object { - "size": "", - }, - "isWeakMap.js": Object { - "size": "", - }, - "isWeakSet.js": Object { - "size": "", - }, - "iteratee.js": Object { - "size": "", - }, - "join.js": Object { - "size": "", - }, - "juxt.js": Object { - "size": "", - }, - "kebabCase.js": Object { - "size": "", - }, - "keyBy.js": Object { - "size": "", - }, - "keys.js": Object { - "size": "", - }, - "keysIn.js": Object { - "size": "", - }, - "lang.js": Object { - "size": "", - }, - "last.js": Object { - "size": "", - }, - "lastIndexOf.js": Object { - "size": "", - }, - "lastIndexOfFrom.js": Object { - "size": "", - }, - "lowerCase.js": Object { - "size": "", - }, - "lowerFirst.js": Object { - "size": "", - }, - "lt.js": Object { - "size": "", - }, - "lte.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "mapKeys.js": Object { - "size": "", - }, - "mapValues.js": Object { - "size": "", - }, - "matches.js": Object { - "size": "", - }, - "matchesProperty.js": Object { - "size": "", - }, - "math.js": Object { - "size": "", - }, - "max.js": Object { - "size": "", - }, - "maxBy.js": Object { - "size": "", - }, - "mean.js": Object { - "size": "", - }, - "meanBy.js": Object { - "size": "", - }, - "memoize.js": Object { - "size": "", - }, - "merge.js": Object { - "size": "", - }, - "mergeAll.js": Object { - "size": "", - }, - "mergeAllWith.js": Object { - "size": "", - }, - "mergeWith.js": Object { - "size": "", - }, - "method.js": Object { - "size": "", - }, - "methodOf.js": Object { - "size": "", - }, - "min.js": Object { - "size": "", - }, - "minBy.js": Object { - "size": "", - }, - "mixin.js": Object { - "size": "", - }, - "multiply.js": Object { - "size": "", - }, - "nAry.js": Object { - "size": "", - }, - "negate.js": Object { - "size": "", - }, - "next.js": Object { - "size": "", - }, - "noop.js": Object { - "size": "", - }, - "now.js": Object { - "size": "", - }, - "nth.js": Object { - "size": "", - }, - "nthArg.js": Object { - "size": "", - }, - "number.js": Object { - "size": "", - }, - "object.js": Object { - "size": "", - }, - "omit.js": Object { - "size": "", - }, - "omitAll.js": Object { - "size": "", - }, - "omitBy.js": Object { - "size": "", - }, - "once.js": Object { - "size": "", - }, - "orderBy.js": Object { - "size": "", - }, - "over.js": Object { - "size": "", - }, - "overArgs.js": Object { - "size": "", - }, - "overEvery.js": Object { - "size": "", - }, - "overSome.js": Object { - "size": "", - }, - "pad.js": Object { - "size": "", - }, - "padChars.js": Object { - "size": "", - }, - "padCharsEnd.js": Object { - "size": "", - }, - "padCharsStart.js": Object { - "size": "", - }, - "padEnd.js": Object { - "size": "", - }, - "padStart.js": Object { - "size": "", - }, - "parseInt.js": Object { - "size": "", - }, - "partial.js": Object { - "size": "", - }, - "partialRight.js": Object { - "size": "", - }, - "partition.js": Object { - "size": "", - }, - "path.js": Object { - "size": "", - }, - "pathEq.js": Object { - "size": "", - }, - "pathOr.js": Object { - "size": "", - }, - "paths.js": Object { - "size": "", - }, - "pick.js": Object { - "size": "", - }, - "pickAll.js": Object { - "size": "", - }, - "pickBy.js": Object { - "size": "", - }, - "pipe.js": Object { - "size": "", - }, - "placeholder.js": Object { - "size": "", - }, - "plant.js": Object { - "size": "", - }, - "pluck.js": Object { - "size": "", - }, - "prop.js": Object { - "size": "", - }, - "propEq.js": Object { - "size": "", - }, - "propOr.js": Object { - "size": "", - }, - "property.js": Object { - "size": "", - }, - "propertyOf.js": Object { - "size": "", - }, - "props.js": Object { - "size": "", - }, - "pull.js": Object { - "size": "", - }, - "pullAll.js": Object { - "size": "", - }, - "pullAllBy.js": Object { - "size": "", - }, - "pullAllWith.js": Object { - "size": "", - }, - "pullAt.js": Object { - "size": "", - }, - "random.js": Object { - "size": "", - }, - "range.js": Object { - "size": "", - }, - "rangeRight.js": Object { - "size": "", - }, - "rangeStep.js": Object { - "size": "", - }, - "rangeStepRight.js": Object { - "size": "", - }, - "rearg.js": Object { - "size": "", - }, - "reduce.js": Object { - "size": "", - }, - "reduceRight.js": Object { - "size": "", - }, - "reject.js": Object { - "size": "", - }, - "remove.js": Object { - "size": "", - }, - "repeat.js": Object { - "size": "", - }, - "replace.js": Object { - "size": "", - }, - "rest.js": Object { - "size": "", - }, - "restFrom.js": Object { - "size": "", - }, - "result.js": Object { - "size": "", - }, - "reverse.js": Object { - "size": "", - }, - "round.js": Object { - "size": "", - }, - "sample.js": Object { - "size": "", - }, - "sampleSize.js": Object { - "size": "", - }, - "seq.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - "setWith.js": Object { - "size": "", - }, - "shuffle.js": Object { - "size": "", - }, - "size.js": Object { - "size": "", - }, - "slice.js": Object { - "size": "", - }, - "snakeCase.js": Object { - "size": "", - }, - "some.js": Object { - "size": "", - }, - "sortBy.js": Object { - "size": "", - }, - "sortedIndex.js": Object { - "size": "", - }, - "sortedIndexBy.js": Object { - "size": "", - }, - "sortedIndexOf.js": Object { - "size": "", - }, - "sortedLastIndex.js": Object { - "size": "", - }, - "sortedLastIndexBy.js": Object { - "size": "", - }, - "sortedLastIndexOf.js": Object { - "size": "", - }, - "sortedUniq.js": Object { - "size": "", - }, - "sortedUniqBy.js": Object { - "size": "", - }, - "split.js": Object { - "size": "", - }, - "spread.js": Object { - "size": "", - }, - "spreadFrom.js": Object { - "size": "", - }, - "startCase.js": Object { - "size": "", - }, - "startsWith.js": Object { - "size": "", - }, - "string.js": Object { - "size": "", - }, - "stubArray.js": Object { - "size": "", - }, - "stubFalse.js": Object { - "size": "", - }, - "stubObject.js": Object { - "size": "", - }, - "stubString.js": Object { - "size": "", - }, - "stubTrue.js": Object { - "size": "", - }, - "subtract.js": Object { - "size": "", - }, - "sum.js": Object { - "size": "", - }, - "sumBy.js": Object { - "size": "", - }, - "symmetricDifference.js": Object { - "size": "", - }, - "symmetricDifferenceBy.js": Object { - "size": "", - }, - "symmetricDifferenceWith.js": Object { - "size": "", - }, - "tail.js": Object { - "size": "", - }, - "take.js": Object { - "size": "", - }, - "takeLast.js": Object { - "size": "", - }, - "takeLastWhile.js": Object { - "size": "", - }, - "takeRight.js": Object { - "size": "", - }, - "takeRightWhile.js": Object { - "size": "", - }, - "takeWhile.js": Object { - "size": "", - }, - "tap.js": Object { - "size": "", - }, - "template.js": Object { - "size": "", - }, - "templateSettings.js": Object { - "size": "", - }, - "throttle.js": Object { - "size": "", - }, - "thru.js": Object { - "size": "", - }, - "times.js": Object { - "size": "", - }, - "toArray.js": Object { - "size": "", - }, - "toFinite.js": Object { - "size": "", - }, - "toInteger.js": Object { - "size": "", - }, - "toIterator.js": Object { - "size": "", - }, - "toJSON.js": Object { - "size": "", - }, - "toLength.js": Object { - "size": "", - }, - "toLower.js": Object { - "size": "", - }, - "toNumber.js": Object { - "size": "", - }, - "toPairs.js": Object { - "size": "", - }, - "toPairsIn.js": Object { - "size": "", - }, - "toPath.js": Object { - "size": "", - }, - "toPlainObject.js": Object { - "size": "", - }, - "toSafeInteger.js": Object { - "size": "", - }, - "toString.js": Object { - "size": "", - }, - "toUpper.js": Object { - "size": "", - }, - "transform.js": Object { - "size": "", - }, - "trim.js": Object { - "size": "", - }, - "trimChars.js": Object { - "size": "", - }, - "trimCharsEnd.js": Object { - "size": "", - }, - "trimCharsStart.js": Object { - "size": "", - }, - "trimEnd.js": Object { - "size": "", - }, - "trimStart.js": Object { - "size": "", - }, - "truncate.js": Object { - "size": "", - }, - "unapply.js": Object { - "size": "", - }, - "unary.js": Object { - "size": "", - }, - "unescape.js": Object { - "size": "", - }, - "union.js": Object { - "size": "", - }, - "unionBy.js": Object { - "size": "", - }, - "unionWith.js": Object { - "size": "", - }, - "uniq.js": Object { - "size": "", - }, - "uniqBy.js": Object { - "size": "", - }, - "uniqWith.js": Object { - "size": "", - }, - "uniqueId.js": Object { - "size": "", - }, - "unnest.js": Object { - "size": "", - }, - "unset.js": Object { - "size": "", - }, - "unzip.js": Object { - "size": "", - }, - "unzipWith.js": Object { - "size": "", - }, - "update.js": Object { - "size": "", - }, - "updateWith.js": Object { - "size": "", - }, - "upperCase.js": Object { - "size": "", - }, - "upperFirst.js": Object { - "size": "", - }, - "useWith.js": Object { - "size": "", - }, - "util.js": Object { - "size": "", - }, - "value.js": Object { - "size": "", - }, - "valueOf.js": Object { - "size": "", - }, - "values.js": Object { - "size": "", - }, - "valuesIn.js": Object { - "size": "", - }, - "where.js": Object { - "size": "", - }, - "whereEq.js": Object { - "size": "", - }, - "without.js": Object { - "size": "", - }, - "words.js": Object { - "size": "", - }, - "wrap.js": Object { - "size": "", - }, - "wrapperAt.js": Object { - "size": "", - }, - "wrapperChain.js": Object { - "size": "", - }, - "wrapperLodash.js": Object { - "size": "", - }, - "wrapperReverse.js": Object { - "size": "", - }, - "wrapperValue.js": Object { - "size": "", - }, - "xor.js": Object { - "size": "", - }, - "xorBy.js": Object { - "size": "", - }, - "xorWith.js": Object { - "size": "", - }, - "zip.js": Object { - "size": "", - }, - "zipAll.js": Object { - "size": "", - }, - "zipObj.js": Object { - "size": "", - }, - "zipObject.js": Object { - "size": "", - }, - "zipObjectDeep.js": Object { - "size": "", - }, - "zipWith.js": Object { - "size": "", - }, - }, - }, - "fp.js": Object { - "size": "", - }, - "fromPairs.js": Object { - "size": "", - }, - "function.js": Object { - "size": "", - }, - "functions.js": Object { - "size": "", - }, - "functionsIn.js": Object { - "size": "", - }, - "get.js": Object { - "size": "", - }, - "groupBy.js": Object { - "size": "", - }, - "gt.js": Object { - "size": "", - }, - "gte.js": Object { - "size": "", - }, - "has.js": Object { - "size": "", - }, - "hasIn.js": Object { - "size": "", - }, - "head.js": Object { - "size": "", - }, - "identity.js": Object { - "size": "", - }, - "inRange.js": Object { - "size": "", - }, - "includes.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "indexOf.js": Object { - "size": "", - }, - "initial.js": Object { - "size": "", - }, - "intersection.js": Object { - "size": "", - }, - "intersectionBy.js": Object { - "size": "", - }, - "intersectionWith.js": Object { - "size": "", - }, - "invert.js": Object { - "size": "", - }, - "invertBy.js": Object { - "size": "", - }, - "invoke.js": Object { - "size": "", - }, - "invokeMap.js": Object { - "size": "", - }, - "isArguments.js": Object { - "size": "", - }, - "isArray.js": Object { - "size": "", - }, - "isArrayBuffer.js": Object { - "size": "", - }, - "isArrayLike.js": Object { - "size": "", - }, - "isArrayLikeObject.js": Object { - "size": "", - }, - "isBoolean.js": Object { - "size": "", - }, - "isBuffer.js": Object { - "size": "", - }, - "isDate.js": Object { - "size": "", - }, - "isElement.js": Object { - "size": "", - }, - "isEmpty.js": Object { - "size": "", - }, - "isEqual.js": Object { - "size": "", - }, - "isEqualWith.js": Object { - "size": "", - }, - "isError.js": Object { - "size": "", - }, - "isFinite.js": Object { - "size": "", - }, - "isFunction.js": Object { - "size": "", - }, - "isInteger.js": Object { - "size": "", - }, - "isLength.js": Object { - "size": "", - }, - "isMap.js": Object { - "size": "", - }, - "isMatch.js": Object { - "size": "", - }, - "isMatchWith.js": Object { - "size": "", - }, - "isNaN.js": Object { - "size": "", - }, - "isNative.js": Object { - "size": "", - }, - "isNil.js": Object { - "size": "", - }, - "isNull.js": Object { - "size": "", - }, - "isNumber.js": Object { - "size": "", - }, - "isObject.js": Object { - "size": "", - }, - "isObjectLike.js": Object { - "size": "", - }, - "isPlainObject.js": Object { - "size": "", - }, - "isRegExp.js": Object { - "size": "", - }, - "isSafeInteger.js": Object { - "size": "", - }, - "isSet.js": Object { - "size": "", - }, - "isString.js": Object { - "size": "", - }, - "isSymbol.js": Object { - "size": "", - }, - "isTypedArray.js": Object { - "size": "", - }, - "isUndefined.js": Object { - "size": "", - }, - "isWeakMap.js": Object { - "size": "", - }, - "isWeakSet.js": Object { - "size": "", - }, - "iteratee.js": Object { - "size": "", - }, - "join.js": Object { - "size": "", - }, - "kebabCase.js": Object { - "size": "", - }, - "keyBy.js": Object { - "size": "", - }, - "keys.js": Object { - "size": "", - }, - "keysIn.js": Object { - "size": "", - }, - "lang.js": Object { - "size": "", - }, - "last.js": Object { - "size": "", - }, - "lastIndexOf.js": Object { - "size": "", - }, - "lodash.js": Object { - "size": "", - }, - "lodash.min.js": Object { - "size": "", - }, - "lowerCase.js": Object { - "size": "", - }, - "lowerFirst.js": Object { - "size": "", - }, - "lt.js": Object { - "size": "", - }, - "lte.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "mapKeys.js": Object { - "size": "", - }, - "mapValues.js": Object { - "size": "", - }, - "matches.js": Object { - "size": "", - }, - "matchesProperty.js": Object { - "size": "", - }, - "math.js": Object { - "size": "", - }, - "max.js": Object { - "size": "", - }, - "maxBy.js": Object { - "size": "", - }, - "mean.js": Object { - "size": "", - }, - "meanBy.js": Object { - "size": "", - }, - "memoize.js": Object { - "size": "", - }, - "merge.js": Object { - "size": "", - }, - "mergeWith.js": Object { - "size": "", - }, - "method.js": Object { - "size": "", - }, - "methodOf.js": Object { - "size": "", - }, - "min.js": Object { - "size": "", - }, - "minBy.js": Object { - "size": "", - }, - "mixin.js": Object { - "size": "", - }, - "multiply.js": Object { - "size": "", - }, - "negate.js": Object { - "size": "", - }, - "next.js": Object { - "size": "", - }, - "noop.js": Object { - "size": "", - }, - "now.js": Object { - "size": "", - }, - "nth.js": Object { - "size": "", - }, - "nthArg.js": Object { - "size": "", - }, - "number.js": Object { - "size": "", - }, - "object.js": Object { - "size": "", - }, - "omit.js": Object { - "size": "", - }, - "omitBy.js": Object { - "size": "", - }, - "once.js": Object { - "size": "", - }, - "orderBy.js": Object { - "size": "", - }, - "over.js": Object { - "size": "", - }, - "overArgs.js": Object { - "size": "", - }, - "overEvery.js": Object { - "size": "", - }, - "overSome.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "pad.js": Object { - "size": "", - }, - "padEnd.js": Object { - "size": "", - }, - "padStart.js": Object { - "size": "", - }, - "parseInt.js": Object { - "size": "", - }, - "partial.js": Object { - "size": "", - }, - "partialRight.js": Object { - "size": "", - }, - "partition.js": Object { - "size": "", - }, - "pick.js": Object { - "size": "", - }, - "pickBy.js": Object { - "size": "", - }, - "plant.js": Object { - "size": "", - }, - "property.js": Object { - "size": "", - }, - "propertyOf.js": Object { - "size": "", - }, - "pull.js": Object { - "size": "", - }, - "pullAll.js": Object { - "size": "", - }, - "pullAllBy.js": Object { - "size": "", - }, - "pullAllWith.js": Object { - "size": "", - }, - "pullAt.js": Object { - "size": "", - }, - "random.js": Object { - "size": "", - }, - "range.js": Object { - "size": "", - }, - "rangeRight.js": Object { - "size": "", - }, - "rearg.js": Object { - "size": "", - }, - "reduce.js": Object { - "size": "", - }, - "reduceRight.js": Object { - "size": "", - }, - "reject.js": Object { - "size": "", - }, - "release.md": Object { - "size": "", - }, - "remove.js": Object { - "size": "", - }, - "repeat.js": Object { - "size": "", - }, - "replace.js": Object { - "size": "", - }, - "rest.js": Object { - "size": "", - }, - "result.js": Object { - "size": "", - }, - "reverse.js": Object { - "size": "", - }, - "round.js": Object { - "size": "", - }, - "sample.js": Object { - "size": "", - }, - "sampleSize.js": Object { - "size": "", - }, - "seq.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - "setWith.js": Object { - "size": "", - }, - "shuffle.js": Object { - "size": "", - }, - "size.js": Object { - "size": "", - }, - "slice.js": Object { - "size": "", - }, - "snakeCase.js": Object { - "size": "", - }, - "some.js": Object { - "size": "", - }, - "sortBy.js": Object { - "size": "", - }, - "sortedIndex.js": Object { - "size": "", - }, - "sortedIndexBy.js": Object { - "size": "", - }, - "sortedIndexOf.js": Object { - "size": "", - }, - "sortedLastIndex.js": Object { - "size": "", - }, - "sortedLastIndexBy.js": Object { - "size": "", - }, - "sortedLastIndexOf.js": Object { - "size": "", - }, - "sortedUniq.js": Object { - "size": "", - }, - "sortedUniqBy.js": Object { - "size": "", - }, - "split.js": Object { - "size": "", - }, - "spread.js": Object { - "size": "", - }, - "startCase.js": Object { - "size": "", - }, - "startsWith.js": Object { - "size": "", - }, - "string.js": Object { - "size": "", - }, - "stubArray.js": Object { - "size": "", - }, - "stubFalse.js": Object { - "size": "", - }, - "stubObject.js": Object { - "size": "", - }, - "stubString.js": Object { - "size": "", - }, - "stubTrue.js": Object { - "size": "", - }, - "subtract.js": Object { - "size": "", - }, - "sum.js": Object { - "size": "", - }, - "sumBy.js": Object { - "size": "", - }, - "tail.js": Object { - "size": "", - }, - "take.js": Object { - "size": "", - }, - "takeRight.js": Object { - "size": "", - }, - "takeRightWhile.js": Object { - "size": "", - }, - "takeWhile.js": Object { - "size": "", - }, - "tap.js": Object { - "size": "", - }, - "template.js": Object { - "size": "", - }, - "templateSettings.js": Object { - "size": "", - }, - "throttle.js": Object { - "size": "", - }, - "thru.js": Object { - "size": "", - }, - "times.js": Object { - "size": "", - }, - "toArray.js": Object { - "size": "", - }, - "toFinite.js": Object { - "size": "", - }, - "toInteger.js": Object { - "size": "", - }, - "toIterator.js": Object { - "size": "", - }, - "toJSON.js": Object { - "size": "", - }, - "toLength.js": Object { - "size": "", - }, - "toLower.js": Object { - "size": "", - }, - "toNumber.js": Object { - "size": "", - }, - "toPairs.js": Object { - "size": "", - }, - "toPairsIn.js": Object { - "size": "", - }, - "toPath.js": Object { - "size": "", - }, - "toPlainObject.js": Object { - "size": "", - }, - "toSafeInteger.js": Object { - "size": "", - }, - "toString.js": Object { - "size": "", - }, - "toUpper.js": Object { - "size": "", - }, - "transform.js": Object { - "size": "", - }, - "trim.js": Object { - "size": "", - }, - "trimEnd.js": Object { - "size": "", - }, - "trimStart.js": Object { - "size": "", - }, - "truncate.js": Object { - "size": "", - }, - "unary.js": Object { - "size": "", - }, - "unescape.js": Object { - "size": "", - }, - "union.js": Object { - "size": "", - }, - "unionBy.js": Object { - "size": "", - }, - "unionWith.js": Object { - "size": "", - }, - "uniq.js": Object { - "size": "", - }, - "uniqBy.js": Object { - "size": "", - }, - "uniqWith.js": Object { - "size": "", - }, - "uniqueId.js": Object { - "size": "", - }, - "unset.js": Object { - "size": "", - }, - "unzip.js": Object { - "size": "", - }, - "unzipWith.js": Object { - "size": "", - }, - "update.js": Object { - "size": "", - }, - "updateWith.js": Object { - "size": "", - }, - "upperCase.js": Object { - "size": "", - }, - "upperFirst.js": Object { - "size": "", - }, - "util.js": Object { - "size": "", - }, - "value.js": Object { - "size": "", - }, - "valueOf.js": Object { - "size": "", - }, - "values.js": Object { - "size": "", - }, - "valuesIn.js": Object { - "size": "", - }, - "without.js": Object { - "size": "", - }, - "words.js": Object { - "size": "", - }, - "wrap.js": Object { - "size": "", - }, - "wrapperAt.js": Object { - "size": "", - }, - "wrapperChain.js": Object { - "size": "", - }, - "wrapperLodash.js": Object { - "size": "", - }, - "wrapperReverse.js": Object { - "size": "", - }, - "wrapperValue.js": Object { - "size": "", - }, - "xor.js": Object { - "size": "", - }, - "xorBy.js": Object { - "size": "", - }, - "xorWith.js": Object { - "size": "", - }, - "zip.js": Object { - "size": "", - }, - "zipObject.js": Object { - "size": "", - }, - "zipObjectDeep.js": Object { - "size": "", - }, - "zipWith.js": Object { - "size": "", - }, - }, - }, - "loose-envify": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "cli.js": Object { - "executable": true, - "size": "", - }, - "custom.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "loose-envify.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "replace.js": Object { - "size": "", - }, - }, - }, - "moment": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "dist": Object { - "files": Object { - "locale": Object { - "files": Object { - "af.js": Object { - "size": "", - }, - "ar-dz.js": Object { - "size": "", - }, - "ar-kw.js": Object { - "size": "", - }, - "ar-ly.js": Object { - "size": "", - }, - "ar-ma.js": Object { - "size": "", - }, - "ar-ps.js": Object { - "size": "", - }, - "ar-sa.js": Object { - "size": "", - }, - "ar-tn.js": Object { - "size": "", - }, - "ar.js": Object { - "size": "", - }, - "az.js": Object { - "size": "", - }, - "be.js": Object { - "size": "", - }, - "bg.js": Object { - "size": "", - }, - "bm.js": Object { - "size": "", - }, - "bn-bd.js": Object { - "size": "", - }, - "bn.js": Object { - "size": "", - }, - "bo.js": Object { - "size": "", - }, - "br.js": Object { - "size": "", - }, - "bs.js": Object { - "size": "", - }, - "ca.js": Object { - "size": "", - }, - "cs.js": Object { - "size": "", - }, - "cv.js": Object { - "size": "", - }, - "cy.js": Object { - "size": "", - }, - "da.js": Object { - "size": "", - }, - "de-at.js": Object { - "size": "", - }, - "de-ch.js": Object { - "size": "", - }, - "de.js": Object { - "size": "", - }, - "dv.js": Object { - "size": "", - }, - "el.js": Object { - "size": "", - }, - "en-au.js": Object { - "size": "", - }, - "en-ca.js": Object { - "size": "", - }, - "en-gb.js": Object { - "size": "", - }, - "en-ie.js": Object { - "size": "", - }, - "en-il.js": Object { - "size": "", - }, - "en-in.js": Object { - "size": "", - }, - "en-nz.js": Object { - "size": "", - }, - "en-sg.js": Object { - "size": "", - }, - "eo.js": Object { - "size": "", - }, - "es-do.js": Object { - "size": "", - }, - "es-mx.js": Object { - "size": "", - }, - "es-us.js": Object { - "size": "", - }, - "es.js": Object { - "size": "", - }, - "et.js": Object { - "size": "", - }, - "eu.js": Object { - "size": "", - }, - "fa.js": Object { - "size": "", - }, - "fi.js": Object { - "size": "", - }, - "fil.js": Object { - "size": "", - }, - "fo.js": Object { - "size": "", - }, - "fr-ca.js": Object { - "size": "", - }, - "fr-ch.js": Object { - "size": "", - }, - "fr.js": Object { - "size": "", - }, - "fy.js": Object { - "size": "", - }, - "ga.js": Object { - "size": "", - }, - "gd.js": Object { - "size": "", - }, - "gl.js": Object { - "size": "", - }, - "gom-deva.js": Object { - "size": "", - }, - "gom-latn.js": Object { - "size": "", - }, - "gu.js": Object { - "size": "", - }, - "he.js": Object { - "size": "", - }, - "hi.js": Object { - "size": "", - }, - "hr.js": Object { - "size": "", - }, - "hu.js": Object { - "size": "", - }, - "hy-am.js": Object { - "size": "", - }, - "id.js": Object { - "size": "", - }, - "is.js": Object { - "size": "", - }, - "it-ch.js": Object { - "size": "", - }, - "it.js": Object { - "size": "", - }, - "ja.js": Object { - "size": "", - }, - "jv.js": Object { - "size": "", - }, - "ka.js": Object { - "size": "", - }, - "kk.js": Object { - "size": "", - }, - "km.js": Object { - "size": "", - }, - "kn.js": Object { - "size": "", - }, - "ko.js": Object { - "size": "", - }, - "ku-kmr.js": Object { - "size": "", - }, - "ku.js": Object { - "size": "", - }, - "ky.js": Object { - "size": "", - }, - "lb.js": Object { - "size": "", - }, - "lo.js": Object { - "size": "", - }, - "lt.js": Object { - "size": "", - }, - "lv.js": Object { - "size": "", - }, - "me.js": Object { - "size": "", - }, - "mi.js": Object { - "size": "", - }, - "mk.js": Object { - "size": "", - }, - "ml.js": Object { - "size": "", - }, - "mn.js": Object { - "size": "", - }, - "mr.js": Object { - "size": "", - }, - "ms-my.js": Object { - "size": "", - }, - "ms.js": Object { - "size": "", - }, - "mt.js": Object { - "size": "", - }, - "my.js": Object { - "size": "", - }, - "nb.js": Object { - "size": "", - }, - "ne.js": Object { - "size": "", - }, - "nl-be.js": Object { - "size": "", - }, - "nl.js": Object { - "size": "", - }, - "nn.js": Object { - "size": "", - }, - "oc-lnc.js": Object { - "size": "", - }, - "pa-in.js": Object { - "size": "", - }, - "pl.js": Object { - "size": "", - }, - "pt-br.js": Object { - "size": "", - }, - "pt.js": Object { - "size": "", - }, - "ro.js": Object { - "size": "", - }, - "ru.js": Object { - "size": "", - }, - "sd.js": Object { - "size": "", - }, - "se.js": Object { - "size": "", - }, - "si.js": Object { - "size": "", - }, - "sk.js": Object { - "size": "", - }, - "sl.js": Object { - "size": "", - }, - "sq.js": Object { - "size": "", - }, - "sr-cyrl.js": Object { - "size": "", - }, - "sr.js": Object { - "size": "", - }, - "ss.js": Object { - "size": "", - }, - "sv.js": Object { - "size": "", - }, - "sw.js": Object { - "size": "", - }, - "ta.js": Object { - "size": "", - }, - "te.js": Object { - "size": "", - }, - "tet.js": Object { - "size": "", - }, - "tg.js": Object { - "size": "", - }, - "th.js": Object { - "size": "", - }, - "tk.js": Object { - "size": "", - }, - "tl-ph.js": Object { - "size": "", - }, - "tlh.js": Object { - "size": "", - }, - "tr.js": Object { - "size": "", - }, - "tzl.js": Object { - "size": "", - }, - "tzm-latn.js": Object { - "size": "", - }, - "tzm.js": Object { - "size": "", - }, - "ug-cn.js": Object { - "size": "", - }, - "uk.js": Object { - "size": "", - }, - "ur.js": Object { - "size": "", - }, - "uz-latn.js": Object { - "size": "", - }, - "uz.js": Object { - "size": "", - }, - "vi.js": Object { - "size": "", - }, - "x-pseudo.js": Object { - "size": "", - }, - "yo.js": Object { - "size": "", - }, - "zh-cn.js": Object { - "size": "", - }, - "zh-hk.js": Object { - "size": "", - }, - "zh-mo.js": Object { - "size": "", - }, - "zh-tw.js": Object { - "size": "", - }, - }, - }, - "moment.js": Object { - "size": "", - }, - }, - }, - "ender.js": Object { - "size": "", - }, - "locale": Object { - "files": Object { - "af.js": Object { - "size": "", - }, - "ar-dz.js": Object { - "size": "", - }, - "ar-kw.js": Object { - "size": "", - }, - "ar-ly.js": Object { - "size": "", - }, - "ar-ma.js": Object { - "size": "", - }, - "ar-ps.js": Object { - "size": "", - }, - "ar-sa.js": Object { - "size": "", - }, - "ar-tn.js": Object { - "size": "", - }, - "ar.js": Object { - "size": "", - }, - "az.js": Object { - "size": "", - }, - "be.js": Object { - "size": "", - }, - "bg.js": Object { - "size": "", - }, - "bm.js": Object { - "size": "", - }, - "bn-bd.js": Object { - "size": "", - }, - "bn.js": Object { - "size": "", - }, - "bo.js": Object { - "size": "", - }, - "br.js": Object { - "size": "", - }, - "bs.js": Object { - "size": "", - }, - "ca.js": Object { - "size": "", - }, - "cs.js": Object { - "size": "", - }, - "cv.js": Object { - "size": "", - }, - "cy.js": Object { - "size": "", - }, - "da.js": Object { - "size": "", - }, - "de-at.js": Object { - "size": "", - }, - "de-ch.js": Object { - "size": "", - }, - "de.js": Object { - "size": "", - }, - "dv.js": Object { - "size": "", - }, - "el.js": Object { - "size": "", - }, - "en-au.js": Object { - "size": "", - }, - "en-ca.js": Object { - "size": "", - }, - "en-gb.js": Object { - "size": "", - }, - "en-ie.js": Object { - "size": "", - }, - "en-il.js": Object { - "size": "", - }, - "en-in.js": Object { - "size": "", - }, - "en-nz.js": Object { - "size": "", - }, - "en-sg.js": Object { - "size": "", - }, - "eo.js": Object { - "size": "", - }, - "es-do.js": Object { - "size": "", - }, - "es-mx.js": Object { - "size": "", - }, - "es-us.js": Object { - "size": "", - }, - "es.js": Object { - "size": "", - }, - "et.js": Object { - "size": "", - }, - "eu.js": Object { - "size": "", - }, - "fa.js": Object { - "size": "", - }, - "fi.js": Object { - "size": "", - }, - "fil.js": Object { - "size": "", - }, - "fo.js": Object { - "size": "", - }, - "fr-ca.js": Object { - "size": "", - }, - "fr-ch.js": Object { - "size": "", - }, - "fr.js": Object { - "size": "", - }, - "fy.js": Object { - "size": "", - }, - "ga.js": Object { - "size": "", - }, - "gd.js": Object { - "size": "", - }, - "gl.js": Object { - "size": "", - }, - "gom-deva.js": Object { - "size": "", - }, - "gom-latn.js": Object { - "size": "", - }, - "gu.js": Object { - "size": "", - }, - "he.js": Object { - "size": "", - }, - "hi.js": Object { - "size": "", - }, - "hr.js": Object { - "size": "", - }, - "hu.js": Object { - "size": "", - }, - "hy-am.js": Object { - "size": "", - }, - "id.js": Object { - "size": "", - }, - "is.js": Object { - "size": "", - }, - "it-ch.js": Object { - "size": "", - }, - "it.js": Object { - "size": "", - }, - "ja.js": Object { - "size": "", - }, - "jv.js": Object { - "size": "", - }, - "ka.js": Object { - "size": "", - }, - "kk.js": Object { - "size": "", - }, - "km.js": Object { - "size": "", - }, - "kn.js": Object { - "size": "", - }, - "ko.js": Object { - "size": "", - }, - "ku-kmr.js": Object { - "size": "", - }, - "ku.js": Object { - "size": "", - }, - "ky.js": Object { - "size": "", - }, - "lb.js": Object { - "size": "", - }, - "lo.js": Object { - "size": "", - }, - "lt.js": Object { - "size": "", - }, - "lv.js": Object { - "size": "", - }, - "me.js": Object { - "size": "", - }, - "mi.js": Object { - "size": "", - }, - "mk.js": Object { - "size": "", - }, - "ml.js": Object { - "size": "", - }, - "mn.js": Object { - "size": "", - }, - "mr.js": Object { - "size": "", - }, - "ms-my.js": Object { - "size": "", - }, - "ms.js": Object { - "size": "", - }, - "mt.js": Object { - "size": "", - }, - "my.js": Object { - "size": "", - }, - "nb.js": Object { - "size": "", - }, - "ne.js": Object { - "size": "", - }, - "nl-be.js": Object { - "size": "", - }, - "nl.js": Object { - "size": "", - }, - "nn.js": Object { - "size": "", - }, - "oc-lnc.js": Object { - "size": "", - }, - "pa-in.js": Object { - "size": "", - }, - "pl.js": Object { - "size": "", - }, - "pt-br.js": Object { - "size": "", - }, - "pt.js": Object { - "size": "", - }, - "ro.js": Object { - "size": "", - }, - "ru.js": Object { - "size": "", - }, - "sd.js": Object { - "size": "", - }, - "se.js": Object { - "size": "", - }, - "si.js": Object { - "size": "", - }, - "sk.js": Object { - "size": "", - }, - "sl.js": Object { - "size": "", - }, - "sq.js": Object { - "size": "", - }, - "sr-cyrl.js": Object { - "size": "", - }, - "sr.js": Object { - "size": "", - }, - "ss.js": Object { - "size": "", - }, - "sv.js": Object { - "size": "", - }, - "sw.js": Object { - "size": "", - }, - "ta.js": Object { - "size": "", - }, - "te.js": Object { - "size": "", - }, - "tet.js": Object { - "size": "", - }, - "tg.js": Object { - "size": "", - }, - "th.js": Object { - "size": "", - }, - "tk.js": Object { - "size": "", - }, - "tl-ph.js": Object { - "size": "", - }, - "tlh.js": Object { - "size": "", - }, - "tr.js": Object { - "size": "", - }, - "tzl.js": Object { - "size": "", - }, - "tzm-latn.js": Object { - "size": "", - }, - "tzm.js": Object { - "size": "", - }, - "ug-cn.js": Object { - "size": "", - }, - "uk.js": Object { - "size": "", - }, - "ur.js": Object { - "size": "", - }, - "uz-latn.js": Object { - "size": "", - }, - "uz.js": Object { - "size": "", - }, - "vi.js": Object { - "size": "", - }, - "x-pseudo.js": Object { - "size": "", - }, - "yo.js": Object { - "size": "", - }, - "zh-cn.js": Object { - "size": "", - }, - "zh-hk.js": Object { - "size": "", - }, - "zh-mo.js": Object { - "size": "", - }, - "zh-tw.js": Object { - "size": "", - }, - }, - }, - "min": Object { - "files": Object { - "locales.js": Object { - "size": "", - }, - "locales.min.js": Object { - "size": "", - }, - "locales.min.js.map": Object { - "size": "", - }, - "moment-with-locales.js": Object { - "size": "", - }, - "moment-with-locales.min.js": Object { - "size": "", - }, - "moment-with-locales.min.js.map": Object { - "size": "", - }, - "moment.min.js": Object { - "size": "", - }, - "moment.min.js.map": Object { - "size": "", - }, - }, - }, - "moment.js": Object { - "size": "", - }, - "package.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "src": Object { - "files": Object { - "lib": Object { - "files": Object { - "create": Object { - "files": Object { - "check-overflow.js": Object { - "size": "", - }, - "date-from-array.js": Object { - "size": "", - }, - "from-anything.js": Object { - "size": "", - }, - "from-array.js": Object { - "size": "", - }, - "from-object.js": Object { - "size": "", - }, - "from-string-and-array.js": Object { - "size": "", - }, - "from-string-and-format.js": Object { - "size": "", - }, - "from-string.js": Object { - "size": "", - }, - "local.js": Object { - "size": "", - }, - "parsing-flags.js": Object { - "size": "", - }, - "utc.js": Object { - "size": "", - }, - "valid.js": Object { - "size": "", - }, - }, - }, - "duration": Object { - "files": Object { - "abs.js": Object { - "size": "", - }, - "add-subtract.js": Object { - "size": "", - }, - "as.js": Object { - "size": "", - }, - "bubble.js": Object { - "size": "", - }, - "clone.js": Object { - "size": "", - }, - "constructor.js": Object { - "size": "", - }, - "create.js": Object { - "size": "", - }, - "duration.js": Object { - "size": "", - }, - "get.js": Object { - "size": "", - }, - "humanize.js": Object { - "size": "", - }, - "iso-string.js": Object { - "size": "", - }, - "prototype.js": Object { - "size": "", - }, - "valid.js": Object { - "size": "", - }, - }, - }, - "format": Object { - "files": Object { - "format.js": Object { - "size": "", - }, - }, - }, - "locale": Object { - "files": Object { - "base-config.js": Object { - "size": "", - }, - "calendar.js": Object { - "size": "", - }, - "constructor.js": Object { - "size": "", - }, - "en.js": Object { - "size": "", - }, - "formats.js": Object { - "size": "", - }, - "invalid.js": Object { - "size": "", - }, - "lists.js": Object { - "size": "", - }, - "locale.js": Object { - "size": "", - }, - "locales.js": Object { - "size": "", - }, - "ordinal.js": Object { - "size": "", - }, - "pre-post-format.js": Object { - "size": "", - }, - "prototype.js": Object { - "size": "", - }, - "relative.js": Object { - "size": "", - }, - "set.js": Object { - "size": "", - }, - }, - }, - "moment": Object { - "files": Object { - "add-subtract.js": Object { - "size": "", - }, - "calendar.js": Object { - "size": "", - }, - "clone.js": Object { - "size": "", - }, - "compare.js": Object { - "size": "", - }, - "constructor.js": Object { - "size": "", - }, - "creation-data.js": Object { - "size": "", - }, - "diff.js": Object { - "size": "", - }, - "format.js": Object { - "size": "", - }, - "from.js": Object { - "size": "", - }, - "get-set.js": Object { - "size": "", - }, - "locale.js": Object { - "size": "", - }, - "min-max.js": Object { - "size": "", - }, - "moment.js": Object { - "size": "", - }, - "now.js": Object { - "size": "", - }, - "prototype.js": Object { - "size": "", - }, - "start-end-of.js": Object { - "size": "", - }, - "to-type.js": Object { - "size": "", - }, - "to.js": Object { - "size": "", - }, - "valid.js": Object { - "size": "", - }, - }, - }, - "parse": Object { - "files": Object { - "regex.js": Object { - "size": "", - }, - "token.js": Object { - "size": "", - }, - }, - }, - "units": Object { - "files": Object { - "aliases.js": Object { - "size": "", - }, - "constants.js": Object { - "size": "", - }, - "day-of-month.js": Object { - "size": "", - }, - "day-of-week.js": Object { - "size": "", - }, - "day-of-year.js": Object { - "size": "", - }, - "era.js": Object { - "size": "", - }, - "hour.js": Object { - "size": "", - }, - "millisecond.js": Object { - "size": "", - }, - "minute.js": Object { - "size": "", - }, - "month.js": Object { - "size": "", - }, - "offset.js": Object { - "size": "", - }, - "priorities.js": Object { - "size": "", - }, - "quarter.js": Object { - "size": "", - }, - "second.js": Object { - "size": "", - }, - "timestamp.js": Object { - "size": "", - }, - "timezone.js": Object { - "size": "", - }, - "units.js": Object { - "size": "", - }, - "week-calendar-utils.js": Object { - "size": "", - }, - "week-year.js": Object { - "size": "", - }, - "week.js": Object { - "size": "", - }, - "year.js": Object { - "size": "", - }, - }, - }, - "utils": Object { - "files": Object { - "abs-ceil.js": Object { - "size": "", - }, - "abs-floor.js": Object { - "size": "", - }, - "abs-round.js": Object { - "size": "", - }, - "compare-arrays.js": Object { - "size": "", - }, - "defaults.js": Object { - "size": "", - }, - "deprecate.js": Object { - "size": "", - }, - "extend.js": Object { - "size": "", - }, - "has-own-prop.js": Object { - "size": "", - }, - "hooks.js": Object { - "size": "", - }, - "index-of.js": Object { - "size": "", - }, - "is-array.js": Object { - "size": "", - }, - "is-calendar-spec.js": Object { - "size": "", - }, - "is-date.js": Object { - "size": "", - }, - "is-function.js": Object { - "size": "", - }, - "is-leap-year.js": Object { - "size": "", - }, - "is-moment-input.js": Object { - "size": "", - }, - "is-number.js": Object { - "size": "", - }, - "is-object-empty.js": Object { - "size": "", - }, - "is-object.js": Object { - "size": "", - }, - "is-string.js": Object { - "size": "", - }, - "is-undefined.js": Object { - "size": "", - }, - "keys.js": Object { - "size": "", - }, - "map.js": Object { - "size": "", - }, - "mod.js": Object { - "size": "", - }, - "some.js": Object { - "size": "", - }, - "to-int.js": Object { - "size": "", - }, - "zero-fill.js": Object { - "size": "", - }, - }, - }, - }, - }, - "locale": Object { - "files": Object { - "af.js": Object { - "size": "", - }, - "ar-dz.js": Object { - "size": "", - }, - "ar-kw.js": Object { - "size": "", - }, - "ar-ly.js": Object { - "size": "", - }, - "ar-ma.js": Object { - "size": "", - }, - "ar-ps.js": Object { - "size": "", - }, - "ar-sa.js": Object { - "size": "", - }, - "ar-tn.js": Object { - "size": "", - }, - "ar.js": Object { - "size": "", - }, - "az.js": Object { - "size": "", - }, - "be.js": Object { - "size": "", - }, - "bg.js": Object { - "size": "", - }, - "bm.js": Object { - "size": "", - }, - "bn-bd.js": Object { - "size": "", - }, - "bn.js": Object { - "size": "", - }, - "bo.js": Object { - "size": "", - }, - "br.js": Object { - "size": "", - }, - "bs.js": Object { - "size": "", - }, - "ca.js": Object { - "size": "", - }, - "cs.js": Object { - "size": "", - }, - "cv.js": Object { - "size": "", - }, - "cy.js": Object { - "size": "", - }, - "da.js": Object { - "size": "", - }, - "de-at.js": Object { - "size": "", - }, - "de-ch.js": Object { - "size": "", - }, - "de.js": Object { - "size": "", - }, - "dv.js": Object { - "size": "", - }, - "el.js": Object { - "size": "", - }, - "en-au.js": Object { - "size": "", - }, - "en-ca.js": Object { - "size": "", - }, - "en-gb.js": Object { - "size": "", - }, - "en-ie.js": Object { - "size": "", - }, - "en-il.js": Object { - "size": "", - }, - "en-in.js": Object { - "size": "", - }, - "en-nz.js": Object { - "size": "", - }, - "en-sg.js": Object { - "size": "", - }, - "eo.js": Object { - "size": "", - }, - "es-do.js": Object { - "size": "", - }, - "es-mx.js": Object { - "size": "", - }, - "es-us.js": Object { - "size": "", - }, - "es.js": Object { - "size": "", - }, - "et.js": Object { - "size": "", - }, - "eu.js": Object { - "size": "", - }, - "fa.js": Object { - "size": "", - }, - "fi.js": Object { - "size": "", - }, - "fil.js": Object { - "size": "", - }, - "fo.js": Object { - "size": "", - }, - "fr-ca.js": Object { - "size": "", - }, - "fr-ch.js": Object { - "size": "", - }, - "fr.js": Object { - "size": "", - }, - "fy.js": Object { - "size": "", - }, - "ga.js": Object { - "size": "", - }, - "gd.js": Object { - "size": "", - }, - "gl.js": Object { - "size": "", - }, - "gom-deva.js": Object { - "size": "", - }, - "gom-latn.js": Object { - "size": "", - }, - "gu.js": Object { - "size": "", - }, - "he.js": Object { - "size": "", - }, - "hi.js": Object { - "size": "", - }, - "hr.js": Object { - "size": "", - }, - "hu.js": Object { - "size": "", - }, - "hy-am.js": Object { - "size": "", - }, - "id.js": Object { - "size": "", - }, - "is.js": Object { - "size": "", - }, - "it-ch.js": Object { - "size": "", - }, - "it.js": Object { - "size": "", - }, - "ja.js": Object { - "size": "", - }, - "jv.js": Object { - "size": "", - }, - "ka.js": Object { - "size": "", - }, - "kk.js": Object { - "size": "", - }, - "km.js": Object { - "size": "", - }, - "kn.js": Object { - "size": "", - }, - "ko.js": Object { - "size": "", - }, - "ku-kmr.js": Object { - "size": "", - }, - "ku.js": Object { - "size": "", - }, - "ky.js": Object { - "size": "", - }, - "lb.js": Object { - "size": "", - }, - "lo.js": Object { - "size": "", - }, - "lt.js": Object { - "size": "", - }, - "lv.js": Object { - "size": "", - }, - "me.js": Object { - "size": "", - }, - "mi.js": Object { - "size": "", - }, - "mk.js": Object { - "size": "", - }, - "ml.js": Object { - "size": "", - }, - "mn.js": Object { - "size": "", - }, - "mr.js": Object { - "size": "", - }, - "ms-my.js": Object { - "size": "", - }, - "ms.js": Object { - "size": "", - }, - "mt.js": Object { - "size": "", - }, - "my.js": Object { - "size": "", - }, - "nb.js": Object { - "size": "", - }, - "ne.js": Object { - "size": "", - }, - "nl-be.js": Object { - "size": "", - }, - "nl.js": Object { - "size": "", - }, - "nn.js": Object { - "size": "", - }, - "oc-lnc.js": Object { - "size": "", - }, - "pa-in.js": Object { - "size": "", - }, - "pl.js": Object { - "size": "", - }, - "pt-br.js": Object { - "size": "", - }, - "pt.js": Object { - "size": "", - }, - "ro.js": Object { - "size": "", - }, - "ru.js": Object { - "size": "", - }, - "sd.js": Object { - "size": "", - }, - "se.js": Object { - "size": "", - }, - "si.js": Object { - "size": "", - }, - "sk.js": Object { - "size": "", - }, - "sl.js": Object { - "size": "", - }, - "sq.js": Object { - "size": "", - }, - "sr-cyrl.js": Object { - "size": "", - }, - "sr.js": Object { - "size": "", - }, - "ss.js": Object { - "size": "", - }, - "sv.js": Object { - "size": "", - }, - "sw.js": Object { - "size": "", - }, - "ta.js": Object { - "size": "", - }, - "te.js": Object { - "size": "", - }, - "tet.js": Object { - "size": "", - }, - "tg.js": Object { - "size": "", - }, - "th.js": Object { - "size": "", - }, - "tk.js": Object { - "size": "", - }, - "tl-ph.js": Object { - "size": "", - }, - "tlh.js": Object { - "size": "", - }, - "tr.js": Object { - "size": "", - }, - "tzl.js": Object { - "size": "", - }, - "tzm-latn.js": Object { - "size": "", - }, - "tzm.js": Object { - "size": "", - }, - "ug-cn.js": Object { - "size": "", - }, - "uk.js": Object { - "size": "", - }, - "ur.js": Object { - "size": "", - }, - "uz-latn.js": Object { - "size": "", - }, - "uz.js": Object { - "size": "", - }, - "vi.js": Object { - "size": "", - }, - "x-pseudo.js": Object { - "size": "", - }, - "yo.js": Object { - "size": "", - }, - "zh-cn.js": Object { - "size": "", - }, - "zh-hk.js": Object { - "size": "", - }, - "zh-mo.js": Object { - "size": "", - }, - "zh-tw.js": Object { - "size": "", - }, - }, - }, - "moment.js": Object { - "size": "", - }, - }, - }, - }, - }, - "ms": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - "license.md": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - }, - }, - "node-fetch": Object { - "files": Object { - "ERROR-HANDLING.md": Object { - "size": "", - }, - "LICENSE.md": Object { - "size": "", - }, - "LIMITS.md": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "lib": Object { - "files": Object { - "body.js": Object { - "size": "", - }, - "fetch-error.js": Object { - "size": "", - }, - "headers.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "request.js": Object { - "size": "", - }, - "response.js": Object { - "size": "", - }, - }, - }, - "package.json": Object { - "size": "", - }, - }, - }, - "object-assign": Object { - "files": Object { - "index.js": Object { - "size": "", - }, - "license": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - }, - }, - "promise": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "build.js": Object { - "size": "", - }, - "core.js": Object { - "size": "", - }, - "domains": Object { - "files": Object { - "core.js": Object { - "size": "", - }, - "done.js": Object { - "size": "", - }, - "es6-extensions.js": Object { - "size": "", - }, - "finally.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "node-extensions.js": Object { - "size": "", - }, - "rejection-tracking.js": Object { - "size": "", - }, - "synchronous.js": Object { - "size": "", - }, - }, - }, - "index.js": Object { - "size": "", - }, - "lib": Object { - "files": Object { - "core.js": Object { - "size": "", - }, - "done.js": Object { - "size": "", - }, - "es6-extensions.js": Object { - "size": "", - }, - "finally.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "node-extensions.js": Object { - "size": "", - }, - "rejection-tracking.js": Object { - "size": "", - }, - "synchronous.js": Object { - "size": "", - }, - }, - }, - "package.json": Object { - "size": "", - }, - "polyfill-done.js": Object { - "size": "", - }, - "polyfill.js": Object { - "size": "", - }, - "setimmediate": Object { - "files": Object { - "core.js": Object { - "size": "", - }, - "done.js": Object { - "size": "", - }, - "es6-extensions.js": Object { - "size": "", - }, - "finally.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "node-extensions.js": Object { - "size": "", - }, - "rejection-tracking.js": Object { - "size": "", - }, - "synchronous.js": Object { - "size": "", - }, - }, - }, - "src": Object { - "files": Object { - "core.js": Object { - "size": "", - }, - "done.js": Object { - "size": "", - }, - "es6-extensions.js": Object { - "size": "", - }, - "finally.js": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "node-extensions.js": Object { - "size": "", - }, - "rejection-tracking.js": Object { - "size": "", - }, - "synchronous.js": Object { - "size": "", - }, - }, - }, - }, - }, - "rc-datepicker": Object { - "files": Object { - ".drone.yml": Object { - "size": "", - }, - "LICENSE": Object { - "size": "", - }, - "index.js": Object { - "size": "", - }, - "lib": Object { - "files": Object { - "DatePicker.js": Object { - "size": "", - }, - "DatePickerInput.js": Object { - "size": "", - }, - "InvalidDate.js": Object { - "size": "", - }, - "Picker.js": Object { - "size": "", - }, - "PickerTop.js": Object { - "size": "", - }, - "Row.js": Object { - "size": "", - }, - "daypicker": Object { - "files": Object { - "DayPicker.js": Object { - "size": "", - }, - "DayPickerBody.js": Object { - "size": "", - }, - "DayPickerTop.js": Object { - "size": "", - }, - }, - }, - "index.js": Object { - "size": "", - }, - "monthpicker": Object { - "files": Object { - "MonthPicker.js": Object { - "size": "", - }, - "MonthPickerBody.js": Object { - "size": "", - }, - "MonthPickerTop.js": Object { - "size": "", - }, - }, - }, - "style.css": Object { - "size": "", - }, - "utils": Object { - "files": Object { - "DateUtils.js": Object { - "size": "", - }, - "ValueLinkMixin.js": Object { - "size": "", - }, - "formatMixin.js": Object { - "size": "", - }, - }, - }, - "yearpicker": Object { - "files": Object { - "YearPicker.js": Object { - "size": "", - }, - "YearPickerBody.js": Object { - "size": "", - }, - "YearPickerTop.js": Object { - "size": "", - }, - }, - }, - }, - }, - "package.json": Object { - "size": "", - }, - "src": Object { - "files": Object { - "DatePicker.js": Object { - "size": "", - }, - "DatePickerInput.js": Object { - "size": "", - }, - "InvalidDate.js": Object { - "size": "", - }, - "Picker.js": Object { - "size": "", - }, - "PickerTop.js": Object { - "size": "", - }, - "Row.js": Object { - "size": "", - }, - "daypicker": Object { - "files": Object { - "DayPicker.js": Object { - "size": "", - }, - "DayPickerBody.js": Object { - "size": "", - }, - "DayPickerTop.js": Object { - "size": "", - }, - }, - }, - "index.js": Object { - "size": "", - }, - "monthpicker": Object { - "files": Object { - "MonthPicker.js": Object { - "size": "", - }, - "MonthPickerBody.js": Object { - "size": "", - }, - "MonthPickerTop.js": Object { - "size": "", - }, - }, - }, - "style.scss": Object { - "size": "", - }, - "utils": Object { - "files": Object { - "DateUtils.js": Object { - "size": "", - }, - "ValueLinkMixin.js": Object { - "size": "", - }, - "formatMixin.js": Object { - "size": "", - }, - }, - }, - "yearpicker": Object { - "files": Object { - "YearPicker.js": Object { - "size": "", - }, - "YearPickerBody.js": Object { - "size": "", - }, - "YearPickerTop.js": Object { - "size": "", - }, - }, - }, - }, - }, - }, - }, - "react": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "PATENTS": Object { - "size": "", - }, - "dist": Object { - "files": Object { - "react-with-addons.js": Object { - "size": "", - }, - "react-with-addons.min.js": Object { - "size": "", - }, - "react.js": Object { - "size": "", - }, - "react.min.js": Object { - "size": "", - }, - }, - }, - "lib": Object { - "files": Object { - "AutoFocusUtils.js": Object { - "size": "", - }, - "BeforeInputEventPlugin.js": Object { - "size": "", - }, - "CSSProperty.js": Object { - "size": "", - }, - "CSSPropertyOperations.js": Object { - "size": "", - }, - "CallbackQueue.js": Object { - "size": "", - }, - "ChangeEventPlugin.js": Object { - "size": "", - }, - "DOMChildrenOperations.js": Object { - "size": "", - }, - "DOMLazyTree.js": Object { - "size": "", - }, - "DOMNamespaces.js": Object { - "size": "", - }, - "DOMProperty.js": Object { - "size": "", - }, - "DOMPropertyOperations.js": Object { - "size": "", - }, - "Danger.js": Object { - "size": "", - }, - "DefaultEventPluginOrder.js": Object { - "size": "", - }, - "DisabledInputUtils.js": Object { - "size": "", - }, - "EnterLeaveEventPlugin.js": Object { - "size": "", - }, - "EventConstants.js": Object { - "size": "", - }, - "EventPluginHub.js": Object { - "size": "", - }, - "EventPluginRegistry.js": Object { - "size": "", - }, - "EventPluginUtils.js": Object { - "size": "", - }, - "EventPropagators.js": Object { - "size": "", - }, - "FallbackCompositionState.js": Object { - "size": "", - }, - "HTMLDOMPropertyConfig.js": Object { - "size": "", - }, - "KeyEscapeUtils.js": Object { - "size": "", - }, - "LinkedStateMixin.js": Object { - "size": "", - }, - "LinkedValueUtils.js": Object { - "size": "", - }, - "NativeMethodsMixin.js": Object { - "size": "", - }, - "PooledClass.js": Object { - "size": "", - }, - "React.js": Object { - "size": "", - }, - "ReactBrowserEventEmitter.js": Object { - "size": "", - }, - "ReactCSSTransitionGroup.js": Object { - "size": "", - }, - "ReactCSSTransitionGroupChild.js": Object { - "size": "", - }, - "ReactChildReconciler.js": Object { - "size": "", - }, - "ReactChildren.js": Object { - "size": "", - }, - "ReactClass.js": Object { - "size": "", - }, - "ReactComponent.js": Object { - "size": "", - }, - "ReactComponentBrowserEnvironment.js": Object { - "size": "", - }, - "ReactComponentEnvironment.js": Object { - "size": "", - }, - "ReactComponentTreeDevtool.js": Object { - "size": "", - }, - "ReactComponentTreeTestUtils.js": Object { - "size": "", - }, - "ReactComponentWithPureRenderMixin.js": Object { - "size": "", - }, - "ReactCompositeComponent.js": Object { - "size": "", - }, - "ReactCurrentOwner.js": Object { - "size": "", - }, - "ReactDOM.js": Object { - "size": "", - }, - "ReactDOMButton.js": Object { - "size": "", - }, - "ReactDOMComponent.js": Object { - "size": "", - }, - "ReactDOMComponentFlags.js": Object { - "size": "", - }, - "ReactDOMComponentTree.js": Object { - "size": "", - }, - "ReactDOMContainerInfo.js": Object { - "size": "", - }, - "ReactDOMDebugTool.js": Object { - "size": "", - }, - "ReactDOMEmptyComponent.js": Object { - "size": "", - }, - "ReactDOMFactories.js": Object { - "size": "", - }, - "ReactDOMFeatureFlags.js": Object { - "size": "", - }, - "ReactDOMFiber.js": Object { - "size": "", - }, - "ReactDOMIDOperations.js": Object { - "size": "", - }, - "ReactDOMInput.js": Object { - "size": "", - }, - "ReactDOMInstrumentation.js": Object { - "size": "", - }, - "ReactDOMNullInputValuePropDevtool.js": Object { - "size": "", - }, - "ReactDOMOption.js": Object { - "size": "", - }, - "ReactDOMSelect.js": Object { - "size": "", - }, - "ReactDOMSelection.js": Object { - "size": "", - }, - "ReactDOMServer.js": Object { - "size": "", - }, - "ReactDOMTextComponent.js": Object { - "size": "", - }, - "ReactDOMTextarea.js": Object { - "size": "", - }, - "ReactDOMTreeTraversal.js": Object { - "size": "", - }, - "ReactDOMUnknownPropertyDevtool.js": Object { - "size": "", - }, - "ReactDebugTool.js": Object { - "size": "", - }, - "ReactDefaultBatchingStrategy.js": Object { - "size": "", - }, - "ReactDefaultInjection.js": Object { - "size": "", - }, - "ReactElement.js": Object { - "size": "", - }, - "ReactElementValidator.js": Object { - "size": "", - }, - "ReactEmptyComponent.js": Object { - "size": "", - }, - "ReactErrorUtils.js": Object { - "size": "", - }, - "ReactEventEmitterMixin.js": Object { - "size": "", - }, - "ReactEventListener.js": Object { - "size": "", - }, - "ReactFeatureFlags.js": Object { - "size": "", - }, - "ReactFragment.js": Object { - "size": "", - }, - "ReactHostComponent.js": Object { - "size": "", - }, - "ReactHostOperationHistoryDevtool.js": Object { - "size": "", - }, - "ReactInjection.js": Object { - "size": "", - }, - "ReactInputSelection.js": Object { - "size": "", - }, - "ReactInstanceHandles.js": Object { - "size": "", - }, - "ReactInstanceMap.js": Object { - "size": "", - }, - "ReactInstrumentation.js": Object { - "size": "", - }, - "ReactInvalidSetStateWarningDevTool.js": Object { - "size": "", - }, - "ReactLink.js": Object { - "size": "", - }, - "ReactMarkupChecksum.js": Object { - "size": "", - }, - "ReactMount.js": Object { - "size": "", - }, - "ReactMultiChild.js": Object { - "size": "", - }, - "ReactMultiChildUpdateTypes.js": Object { - "size": "", - }, - "ReactNative.js": Object { - "size": "", - }, - "ReactNativeAttributePayload.js": Object { - "size": "", - }, - "ReactNativeBaseComponent.js": Object { - "size": "", - }, - "ReactNativeBridgeEventPlugin.js": Object { - "size": "", - }, - "ReactNativeComponentEnvironment.js": Object { - "size": "", - }, - "ReactNativeComponentTree.js": Object { - "size": "", - }, - "ReactNativeContainerInfo.js": Object { - "size": "", - }, - "ReactNativeDOMIDOperations.js": Object { - "size": "", - }, - "ReactNativeDefaultInjection.js": Object { - "size": "", - }, - "ReactNativeEventEmitter.js": Object { - "size": "", - }, - "ReactNativeEventPluginOrder.js": Object { - "size": "", - }, - "ReactNativeGlobalResponderHandler.js": Object { - "size": "", - }, - "ReactNativeMount.js": Object { - "size": "", - }, - "ReactNativePropRegistry.js": Object { - "size": "", - }, - "ReactNativeReconcileTransaction.js": Object { - "size": "", - }, - "ReactNativeTagHandles.js": Object { - "size": "", - }, - "ReactNativeTextComponent.js": Object { - "size": "", - }, - "ReactNativeTreeTraversal.js": Object { - "size": "", - }, - "ReactNodeTypes.js": Object { - "size": "", - }, - "ReactNoop.js": Object { - "size": "", - }, - "ReactNoopUpdateQueue.js": Object { - "size": "", - }, - "ReactOwner.js": Object { - "size": "", - }, - "ReactPerf.js": Object { - "size": "", - }, - "ReactPropTypeLocationNames.js": Object { - "size": "", - }, - "ReactPropTypeLocations.js": Object { - "size": "", - }, - "ReactPropTypes.js": Object { - "size": "", - }, - "ReactReconcileTransaction.js": Object { - "size": "", - }, - "ReactReconciler.js": Object { - "size": "", - }, - "ReactRef.js": Object { - "size": "", - }, - "ReactServerBatchingStrategy.js": Object { - "size": "", - }, - "ReactServerRendering.js": Object { - "size": "", - }, - "ReactServerRenderingTransaction.js": Object { - "size": "", - }, - "ReactServerUpdateQueue.js": Object { - "size": "", - }, - "ReactSimpleEmptyComponent.js": Object { - "size": "", - }, - "ReactStateSetters.js": Object { - "size": "", - }, - "ReactTestMount.js": Object { - "size": "", - }, - "ReactTestReconcileTransaction.js": Object { - "size": "", - }, - "ReactTestRenderer.js": Object { - "size": "", - }, - "ReactTestUtils.js": Object { - "size": "", - }, - "ReactTransitionChildMapping.js": Object { - "size": "", - }, - "ReactTransitionEvents.js": Object { - "size": "", - }, - "ReactTransitionGroup.js": Object { - "size": "", - }, - "ReactUMDEntry.js": Object { - "size": "", - }, - "ReactUpdateQueue.js": Object { - "size": "", - }, - "ReactUpdates.js": Object { - "size": "", - }, - "ReactVersion.js": Object { - "size": "", - }, - "ReactWithAddons.js": Object { - "size": "", - }, - "ReactWithAddonsUMDEntry.js": Object { - "size": "", - }, - "ResponderEventPlugin.js": Object { - "size": "", - }, - "ResponderSyntheticEvent.js": Object { - "size": "", - }, - "ResponderTouchHistoryStore.js": Object { - "size": "", - }, - "SVGDOMPropertyConfig.js": Object { - "size": "", - }, - "SelectEventPlugin.js": Object { - "size": "", - }, - "SimpleEventPlugin.js": Object { - "size": "", - }, - "SyntheticAnimationEvent.js": Object { - "size": "", - }, - "SyntheticClipboardEvent.js": Object { - "size": "", - }, - "SyntheticCompositionEvent.js": Object { - "size": "", - }, - "SyntheticDragEvent.js": Object { - "size": "", - }, - "SyntheticEvent.js": Object { - "size": "", - }, - "SyntheticFocusEvent.js": Object { - "size": "", - }, - "SyntheticInputEvent.js": Object { - "size": "", - }, - "SyntheticKeyboardEvent.js": Object { - "size": "", - }, - "SyntheticMouseEvent.js": Object { - "size": "", - }, - "SyntheticTouchEvent.js": Object { - "size": "", - }, - "SyntheticTransitionEvent.js": Object { - "size": "", - }, - "SyntheticUIEvent.js": Object { - "size": "", - }, - "SyntheticWheelEvent.js": Object { - "size": "", - }, - "TapEventPlugin.js": Object { - "size": "", - }, - "TouchHistoryMath.js": Object { - "size": "", - }, - "Transaction.js": Object { - "size": "", - }, - "ViewportMetrics.js": Object { - "size": "", - }, - "accumulate.js": Object { - "size": "", - }, - "accumulateInto.js": Object { - "size": "", - }, - "adler32.js": Object { - "size": "", - }, - "canDefineProperty.js": Object { - "size": "", - }, - "checkReactTypeSpec.js": Object { - "size": "", - }, - "createHierarchyRenderer.js": Object { - "size": "", - }, - "createMicrosoftUnsafeLocalFunction.js": Object { - "size": "", - }, - "createReactNativeComponentClass.js": Object { - "size": "", - }, - "dangerousStyleValue.js": Object { - "size": "", - }, - "deprecated.js": Object { - "size": "", - }, - "escapeTextContentForBrowser.js": Object { - "size": "", - }, - "findDOMNode.js": Object { - "size": "", - }, - "findNodeHandle.js": Object { - "size": "", - }, - "flattenChildren.js": Object { - "size": "", - }, - "forEachAccumulated.js": Object { - "size": "", - }, - "getEventCharCode.js": Object { - "size": "", - }, - "getEventKey.js": Object { - "size": "", - }, - "getEventModifierState.js": Object { - "size": "", - }, - "getEventTarget.js": Object { - "size": "", - }, - "getHostComponentFromComposite.js": Object { - "size": "", - }, - "getIteratorFn.js": Object { - "size": "", - }, - "getNodeForCharacterOffset.js": Object { - "size": "", - }, - "getTestDocument.js": Object { - "size": "", - }, - "getTextContentAccessor.js": Object { - "size": "", - }, - "getVendorPrefixedEventName.js": Object { - "size": "", - }, - "instantiateReactComponent.js": Object { - "size": "", - }, - "isEventSupported.js": Object { - "size": "", - }, - "isTextInputElement.js": Object { - "size": "", - }, - "onlyChild.js": Object { - "size": "", - }, - "quoteAttributeValueForBrowser.js": Object { - "size": "", - }, - "reactComponentExpect.js": Object { - "size": "", - }, - "reactProdInvariant.js": Object { - "size": "", - }, - "renderSubtreeIntoContainer.js": Object { - "size": "", - }, - "setInnerHTML.js": Object { - "size": "", - }, - "setTextContent.js": Object { - "size": "", - }, - "shallowCompare.js": Object { - "size": "", - }, - "shouldUpdateReactComponent.js": Object { - "size": "", - }, - "sliceChildren.js": Object { - "size": "", - }, - "traverseAllChildren.js": Object { - "size": "", - }, - "update.js": Object { - "size": "", - }, - "validateDOMNesting.js": Object { - "size": "", - }, - }, - }, - "package.json": Object { - "size": "", - }, - "react.js": Object { - "size": "", - }, - }, - }, - "react-dom": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "PATENTS": Object { - "size": "", - }, - "dist": Object { - "files": Object { - "react-dom-server.js": Object { - "size": "", - }, - "react-dom-server.min.js": Object { - "size": "", - }, - "react-dom.js": Object { - "size": "", - }, - "react-dom.min.js": Object { - "size": "", - }, - }, - }, - "index.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "package.json.rej": Object { - "size": "", - }, - "server.js": Object { - "size": "", - }, - }, - }, - "safer-buffer": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "Porting-Buffer.md": Object { - "size": "", - }, - "dangerous.js": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "safer.js": Object { - "size": "", - }, - "tests.js": Object { - "size": "", - }, - }, - }, - "setimmediate": Object { - "files": Object { - "LICENSE.txt": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "setImmediate.js": Object { - "size": "", - }, - }, - }, - "ua-parser-js": Object { - "files": Object { - "dist": Object { - "files": Object { - "ua-parser.html": Object { - "size": "", - }, - "ua-parser.min.js": Object { - "size": "", - }, - "ua-parser.pack.js": Object { - "size": "", - }, - }, - }, - "license.md": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - "script": Object { - "files": Object { - "cli.js": Object { - "executable": true, - "size": "", - }, - }, - }, - "src": Object { - "files": Object { - "ua-parser.js": Object { - "executable": true, - "size": "", - }, - }, - }, - }, - }, - "whatwg-fetch": Object { - "files": Object { - "LICENSE": Object { - "size": "", - }, - "dist": Object { - "files": Object { - "fetch.umd.js": Object { - "size": "", - }, - "fetch.umd.js.flow": Object { - "size": "", - }, - }, - }, - "fetch.js": Object { - "size": "", - }, - "fetch.js.flow": Object { - "size": "", - }, - "package.json": Object { - "size": "", - }, - }, - }, - }, - }, - "package.json": Object { - "size": "", - }, - }, -} -`; - -exports[`failed peer dep 3`] = ` -Array [ - "app.asar", -] -`; - exports[`ignore node_modules 1`] = ` Object { "linux": Array [], From 0a318696e7bcaa2bc99c8f9cee880bac4188284f Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Tue, 8 Oct 2024 23:29:57 +0800 Subject: [PATCH 45/85] madd node-module-collector --- packages/app-builder-lib/package.json | 3 +- .../src/node-module-collector/hoist.ts | 1108 +++++++++++++++++ .../src/node-module-collector/index.ts | 28 + .../nodeModulesCollector.ts | 110 ++ .../npmNodeModulesCollector.ts | 24 + .../node-module-collector/packageManager.ts | 112 ++ .../pnpmNodeModulesCollector.ts | 24 + .../src/node-module-collector/types.ts | 25 + .../yarnNodeModulesCollector.ts | 24 + .../app-builder-lib/src/util/appFileCopier.ts | 2 +- packages/app-builder-lib/src/util/yarn.ts | 2 +- 11 files changed, 1458 insertions(+), 4 deletions(-) create mode 100644 packages/app-builder-lib/src/node-module-collector/hoist.ts create mode 100644 packages/app-builder-lib/src/node-module-collector/index.ts create mode 100644 packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts create mode 100644 packages/app-builder-lib/src/node-module-collector/npmNodeModulesCollector.ts create mode 100644 packages/app-builder-lib/src/node-module-collector/packageManager.ts create mode 100644 packages/app-builder-lib/src/node-module-collector/pnpmNodeModulesCollector.ts create mode 100644 packages/app-builder-lib/src/node-module-collector/types.ts create mode 100644 packages/app-builder-lib/src/node-module-collector/yarnNodeModulesCollector.ts diff --git a/packages/app-builder-lib/package.json b/packages/app-builder-lib/package.json index 5a58ae1c950..66c4e24db2d 100644 --- a/packages/app-builder-lib/package.json +++ b/packages/app-builder-lib/package.json @@ -77,8 +77,7 @@ "sanitize-filename": "^1.6.3", "semver": "^7.3.8", "tar": "^6.1.12", - "temp-file": "^3.4.0", - "node-module-collector": "1.1.4" + "temp-file": "^3.4.0" }, "///": "babel in devDependencies for proton tests", "devDependencies": { diff --git a/packages/app-builder-lib/src/node-module-collector/hoist.ts b/packages/app-builder-lib/src/node-module-collector/hoist.ts new file mode 100644 index 00000000000..b4b01667b1b --- /dev/null +++ b/packages/app-builder-lib/src/node-module-collector/hoist.ts @@ -0,0 +1,1108 @@ +// copy from https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-nm/sources/hoist.ts +/** + * High-level node_modules hoisting algorithm recipe + * + * 1. Take input dependency graph and start traversing it, + * as you visit new node in the graph - clone it if there can be multiple paths + * to access the node from the graph root to the node, e.g. essentially represent + * the graph with a tree as you go, to make hoisting possible. + * 2. You want to hoist every node possible to the top root node first, + * then to each of its children etc, so you need to keep track what is your current + * root node into which you are hoisting + * 3. Traverse the dependency graph from the current root node and for each package name + * that can be potentially hoisted to the current root node build a list of idents + * in descending hoisting preference. You will check in next steps whether most preferred ident + * for the given package name can be hoisted first, and if not, then you check the + * less preferred ident, etc, until either some ident will be hoisted + * or you run out of idents to check + * (no need to convert the graph to the tree when you build this preference map). + * 4. The children of the root node are already "hoisted", so you need to start + * from the dependencies of these children. You take some child and + * sort its dependencies so that regular dependencies without peer dependencies + * will come first and then those dependencies that peer depend on them. + * This is needed to make algorithm more efficient and hoist nodes which are easier + * to hoist first and then handle peer dependent nodes. + * 5. You take this sorted list of dependencies and check if each of them can be + * hoisted to the current root node. To answer is the node can be hoisted you check + * your constraints - require promise and peer dependency promise. + * The possible answers can be: YES - the node is hoistable to the current root, + * NO - the node is not hoistable to the current root + * and DEPENDS - the node is hoistable to the root if nodes X, Y, Z are hoistable + * to the root. The case DEPENDS happens when all the require and other + * constraints are met, except peer dependency constraints. Note, that the nodes + * that are not package idents currently at the top of preference list are considered + * to have the answer NO right away, before doing any other constraint checks. + * 6. When you have hoistable answer for each dependency of a node you then build + * a list of nodes that are NOT hoistable. These are the nodes that have answer NO + * and the nodes that DEPENDS on these nodes. All the other nodes are hoistable, + * those that have answer YES and those that have answer DEPENDS, + * because they are cyclically dependent on each another + * 7. You hoist all the hoistable nodes to the current root and continue traversing + * the tree. Note, you need to track newly added nodes to the current root, + * because after you finished tree traversal you want to come back to these new nodes + * first thing and hoist everything from each of them to the current tree root. + * 8. After you have finished traversing newly hoisted current root nodes + * it means you cannot hoist anything to the current tree root and you need to pick + * the next node as current tree root and run the algorithm again + * until you run out of candidates for current tree root. + */ +type PackageName = string +export enum HoisterDependencyKind { + REGULAR, + WORKSPACE, + EXTERNAL_SOFT_LINK, +} +export type HoisterTree = { + name: PackageName + identName: PackageName + reference: string + dependencies: Set + peerNames: Set + hoistPriority?: number + dependencyKind?: HoisterDependencyKind +} +export type HoisterResult = { name: PackageName; identName: PackageName; references: Set; dependencies: Set } +type Locator = string +type AliasedLocator = string & { __aliasedLocator: true } +type Ident = string +type HoisterWorkTree = { + name: PackageName + references: Set + ident: Ident + locator: Locator + dependencies: Map + originalDependencies: Map + hoistedDependencies: Map + peerNames: ReadonlySet + decoupled: boolean + reasons: Map + isHoistBorder: boolean + hoistedFrom: Map> + hoistedTo: Map + hoistPriority: number + dependencyKind: HoisterDependencyKind +} + +/** + * Mapping which packages depend on a given package alias + ident. It is used to determine hoisting weight, + * e.g. which one among the group of packages with the same name should be hoisted. + * The package having the biggest number of parents using this package will be hoisted. + */ +type PreferenceMap = Map; dependents: Set; hoistPriority: number }> + +enum Hoistable { + YES, + NO, + DEPENDS, +} +type HoistInfo = + | { + isHoistable: Hoistable.YES + } + | { + isHoistable: Hoistable.NO + reason: string | null + } + | { + isHoistable: Hoistable.DEPENDS + dependsOn: Set + reason: string | null + } + +type ShadowedNodes = Map> + +const makeLocator = (name: string, reference: string) => `${name}@${reference}` +const makeIdent = (name: string, reference: string) => { + const hashIdx = reference.indexOf(`#`) + // Strip virtual reference part, we don't need it for hoisting purposes + const realReference = hashIdx >= 0 ? reference.substring(hashIdx + 1) : reference + return makeLocator(name, realReference) +} + +enum DebugLevel { + NONE = -1, + PERF = 0, + CHECK = 1, + REASONS = 2, + INTENSIVE_CHECK = 9, +} + +export type HoistOptions = { + /** Runs self-checks after hoisting is finished */ + check?: boolean + /** Debug level */ + debugLevel?: DebugLevel + /** Hoist borders are defined by parent node locator and its dependency name. The dependency is considered a border, nothing can be hoisted past this dependency, but dependency can be hoisted */ + hoistingLimits?: Map> +} + +type InternalHoistOptions = { + check?: boolean + debugLevel: DebugLevel + fastLookupPossible: boolean + hoistingLimits: Map> +} + +/** + * Hoists package tree. + * + * The root node of a tree must has id: '.'. + * This function does not mutate its arguments, it hoists and returns tree copy. + * + * @param tree package tree (cycles in the tree are allowed) + * + * @returns hoisted tree copy + */ +export const hoist = (tree: HoisterTree, opts: HoistOptions = {}): HoisterResult => { + const debugLevel = opts.debugLevel || Number(process.env.NM_DEBUG_LEVEL || DebugLevel.NONE) + const check = opts.check || debugLevel >= (DebugLevel.INTENSIVE_CHECK as number) + const hoistingLimits = opts.hoistingLimits || new Map() + const options: InternalHoistOptions = { check, debugLevel, hoistingLimits, fastLookupPossible: true } + let startTime: number + + if (options.debugLevel >= DebugLevel.PERF) startTime = Date.now() + + const treeCopy = cloneTree(tree, options) + + let anotherRoundNeeded = false + let round = 0 + do { + const result = hoistTo(treeCopy, [treeCopy], new Set([treeCopy.locator]), new Map(), options) + anotherRoundNeeded = result.anotherRoundNeeded || result.isGraphChanged + options.fastLookupPossible = false + round++ + } while (anotherRoundNeeded) + + if (options.debugLevel >= DebugLevel.PERF) console.log(`hoist time: ${Date.now() - startTime!}ms, rounds: ${round}`) + + if (options.debugLevel >= DebugLevel.CHECK) { + const prevTreeDump = dumpDepTree(treeCopy) + const isGraphChanged = hoistTo(treeCopy, [treeCopy], new Set([treeCopy.locator]), new Map(), options).isGraphChanged + if (isGraphChanged) throw new Error(`The hoisting result is not terminal, prev tree:\n${prevTreeDump}, next tree:\n${dumpDepTree(treeCopy)}`) + const checkLog = selfCheck(treeCopy) + if (checkLog) { + throw new Error(`${checkLog}, after hoisting finished:\n${dumpDepTree(treeCopy)}`) + } + } + + if (options.debugLevel >= DebugLevel.REASONS) console.log(dumpDepTree(treeCopy)) + + return shrinkTree(treeCopy) +} + +const getZeroRoundUsedDependencies = (rootNodePath: Array): Map => { + const rootNode = rootNodePath[rootNodePath.length - 1] + const usedDependencies = new Map() + const seenNodes = new Set() + + const addUsedDependencies = (node: HoisterWorkTree) => { + if (seenNodes.has(node)) return + seenNodes.add(node) + + for (const dep of node.hoistedDependencies.values()) usedDependencies.set(dep.name, dep) + + for (const dep of node.dependencies.values()) { + if (!node.peerNames.has(dep.name)) { + addUsedDependencies(dep) + } + } + } + + addUsedDependencies(rootNode) + + return usedDependencies +} + +const getUsedDependencies = (rootNodePath: Array): Map => { + const rootNode = rootNodePath[rootNodePath.length - 1] + const usedDependencies = new Map() + const seenNodes = new Set() + + const hiddenDependencies = new Set() + const addUsedDependencies = (node: HoisterWorkTree, hiddenDependencies: Set) => { + if (seenNodes.has(node)) return + seenNodes.add(node) + + for (const dep of node.hoistedDependencies.values()) { + if (!hiddenDependencies.has(dep.name)) { + let reachableDependency + for (const node of rootNodePath) { + reachableDependency = node.dependencies.get(dep.name) + if (reachableDependency) { + usedDependencies.set(reachableDependency.name, reachableDependency) + } + } + } + } + + const childrenHiddenDependencies = new Set() + + for (const dep of node.dependencies.values()) childrenHiddenDependencies.add(dep.name) + + for (const dep of node.dependencies.values()) { + if (!node.peerNames.has(dep.name)) { + addUsedDependencies(dep, childrenHiddenDependencies) + } + } + } + + addUsedDependencies(rootNode, hiddenDependencies) + + return usedDependencies +} + +/** + * This method clones the node and returns cloned node copy, if the node was not previously decoupled. + * + * The node is considered decoupled if there is no multiple parents to any node + * on the path from the dependency graph root up to this node. This means that there are no other + * nodes in dependency graph that somehow transitively use this node and hence node can be hoisted without + * side effects. + * + * The process of node decoupling is done by going from root node of the graph up to the node in concern + * and decoupling each node on this graph path. + * + * @param node original node + * + * @returns decoupled node + */ +const decoupleGraphNode = (parent: HoisterWorkTree, node: HoisterWorkTree): HoisterWorkTree => { + if (node.decoupled) return node + + const { + name, + references, + ident, + locator, + dependencies, + originalDependencies, + hoistedDependencies, + peerNames, + reasons, + isHoistBorder, + hoistPriority, + dependencyKind, + hoistedFrom, + hoistedTo, + } = node + // To perform node hoisting from parent node we must clone parent nodes up to the root node, + // because some other package in the tree might depend on the parent package where hoisting + // cannot be performed + const clone = { + name, + references: new Set(references), + ident, + locator, + dependencies: new Map(dependencies), + originalDependencies: new Map(originalDependencies), + hoistedDependencies: new Map(hoistedDependencies), + peerNames: new Set(peerNames), + reasons: new Map(reasons), + decoupled: true, + isHoistBorder, + hoistPriority, + dependencyKind, + hoistedFrom: new Map(hoistedFrom), + hoistedTo: new Map(hoistedTo), + } + const selfDep = clone.dependencies.get(name) + if (selfDep && selfDep.ident == clone.ident) + // Update self-reference + clone.dependencies.set(name, clone) + + parent.dependencies.set(clone.name, clone) + + return clone +} + +/** + * Builds a map of most preferred packages that might be hoisted to the root node. + * + * The values in the map are idents sorted by preference from most preferred to less preferred. + * If the root node has already some version of a package, the value array will contain only + * one element, since it is not possible for other versions of a package to be hoisted. + * + * @param rootNode root node + * @param preferenceMap preference map + */ +const getHoistIdentMap = (rootNode: HoisterWorkTree, preferenceMap: PreferenceMap): Map> => { + const identMap = new Map>([[rootNode.name, [rootNode.ident]]]) + + for (const dep of rootNode.dependencies.values()) { + if (!rootNode.peerNames.has(dep.name)) { + identMap.set(dep.name, [dep.ident]) + } + } + + const keyList = Array.from(preferenceMap.keys()) + keyList.sort((key1, key2) => { + const entry1 = preferenceMap.get(key1)! + const entry2 = preferenceMap.get(key2)! + if (entry2.hoistPriority !== entry1.hoistPriority) { + return entry2.hoistPriority - entry1.hoistPriority + } else { + const entry1Usages = entry1.dependents.size + entry1.peerDependents.size + const entry2Usages = entry2.dependents.size + entry2.peerDependents.size + return entry2Usages - entry1Usages + } + }) + + for (const key of keyList) { + const name = key.substring(0, key.indexOf(`@`, 1)) + const ident = key.substring(name.length + 1) + if (!rootNode.peerNames.has(name)) { + let idents = identMap.get(name) + if (!idents) { + idents = [] + identMap.set(name, idents) + } + if (idents.indexOf(ident) < 0) { + idents.push(ident) + } + } + } + + return identMap +} + +/** + * Gets regular node dependencies only and sorts them in the order so that + * peer dependencies come before the dependency that rely on them. + * + * @param node graph node + * @returns sorted regular dependencies + */ +const getSortedRegularDependencies = (node: HoisterWorkTree): Set => { + const dependencies: Set = new Set() + + const addDep = (dep: HoisterWorkTree, seenDeps = new Set()) => { + if (seenDeps.has(dep)) return + seenDeps.add(dep) + + for (const peerName of dep.peerNames) { + if (!node.peerNames.has(peerName)) { + const peerDep = node.dependencies.get(peerName) + if (peerDep && !dependencies.has(peerDep)) { + addDep(peerDep, seenDeps) + } + } + } + dependencies.add(dep) + } + + for (const dep of node.dependencies.values()) { + if (!node.peerNames.has(dep.name)) { + addDep(dep) + } + } + + return dependencies +} + +/** + * Performs hoisting all the dependencies down the tree to the root node. + * + * The algorithm used here reduces dependency graph by deduplicating + * instances of the packages while keeping: + * 1. Regular dependency promise: the package should require the exact version of the dependency + * that was declared in its `package.json` + * 2. Peer dependency promise: the package and its direct parent package + * must use the same instance of the peer dependency + * + * The regular and peer dependency promises are kept while performing transform + * on tree branches of packages at a time: + * `root package` -> `parent package 1` ... `parent package n` -> `dependency` + * We check wether we can hoist `dependency` to `root package`, this boils down basically + * to checking: + * 1. Wether `root package` does not depend on other version of `dependency` + * 2. Wether all the peer dependencies of a `dependency` had already been hoisted from all `parent packages` + * + * If many versions of the `dependency` can be hoisted to the `root package` we choose the most used + * `dependency` version in the project among them. + * + * This function mutates the tree. + * + * @param tree package dependencies graph + * @param rootNode root node to hoist to + * @param rootNodePath root node path in the tree + * @param rootNodePathLocators a set of locators for nodes that lead from the top of the tree up to root node + * @param options hoisting options + */ +const hoistTo = ( + tree: HoisterWorkTree, + rootNodePath: Array, + rootNodePathLocators: Set, + parentShadowedNodes: ShadowedNodes, + options: InternalHoistOptions, + seenNodes: Set = new Set() +): { anotherRoundNeeded: boolean; isGraphChanged: boolean } => { + const rootNode = rootNodePath[rootNodePath.length - 1] + if (seenNodes.has(rootNode)) return { anotherRoundNeeded: false, isGraphChanged: false } + seenNodes.add(rootNode) + + const preferenceMap = buildPreferenceMap(rootNode) + + const hoistIdentMap = getHoistIdentMap(rootNode, preferenceMap) + + const usedDependencies = tree == rootNode ? new Map() : options.fastLookupPossible ? getZeroRoundUsedDependencies(rootNodePath) : getUsedDependencies(rootNodePath) + + let wasStateChanged + + let anotherRoundNeeded = false + let isGraphChanged = false + + const hoistIdents = new Map(Array.from(hoistIdentMap.entries()).map(([k, v]) => [k, v[0]])) + const shadowedNodes: ShadowedNodes = new Map() + do { + const result = hoistGraph(tree, rootNodePath, rootNodePathLocators, usedDependencies, hoistIdents, hoistIdentMap, parentShadowedNodes, shadowedNodes, options) + if (result.isGraphChanged) isGraphChanged = true + if (result.anotherRoundNeeded) anotherRoundNeeded = true + + wasStateChanged = false + for (const [name, idents] of hoistIdentMap) { + if (idents.length > 1 && !rootNode.dependencies.has(name)) { + hoistIdents.delete(name) + idents.shift() + hoistIdents.set(name, idents[0]) + wasStateChanged = true + } + } + } while (wasStateChanged) + + for (const dependency of rootNode.dependencies.values()) { + if (!rootNode.peerNames.has(dependency.name) && !rootNodePathLocators.has(dependency.locator)) { + rootNodePathLocators.add(dependency.locator) + const result = hoistTo(tree, [...rootNodePath, dependency], rootNodePathLocators, shadowedNodes, options) + if (result.isGraphChanged) isGraphChanged = true + if (result.anotherRoundNeeded) anotherRoundNeeded = true + + rootNodePathLocators.delete(dependency.locator) + } + } + + return { anotherRoundNeeded, isGraphChanged } +} + +const hasUnhoistedDependencies = (node: HoisterWorkTree): boolean => { + for (const [subName, subDependency] of node.dependencies) { + if (!node.peerNames.has(subName) && subDependency.ident !== node.ident) { + return true + } + } + return false +} + +const getNodeHoistInfo = ( + rootNode: HoisterWorkTree, + rootNodePathLocators: Set, + nodePath: Array, + node: HoisterWorkTree, + usedDependencies: Map, + hoistIdents: Map, + hoistIdentMap: Map>, + shadowedNodes: ShadowedNodes, + { outputReason, fastLookupPossible }: { outputReason: boolean; fastLookupPossible: boolean } +): HoistInfo => { + let reasonRoot + let reason: string | null = null + let dependsOn: Set | null = new Set() + if (outputReason) + reasonRoot = `${Array.from(rootNodePathLocators) + .map(x => prettyPrintLocator(x)) + .join(`→`)}` + + const parentNode = nodePath[nodePath.length - 1] + // We cannot hoist self-references + const isSelfReference = node.ident === parentNode.ident + let isHoistable = !isSelfReference + if (outputReason && !isHoistable) reason = `- self-reference` + + if (isHoistable) { + isHoistable = node.dependencyKind !== HoisterDependencyKind.WORKSPACE + if (outputReason && !isHoistable) { + reason = `- workspace` + } + } + + if (isHoistable && node.dependencyKind === HoisterDependencyKind.EXTERNAL_SOFT_LINK) { + isHoistable = !hasUnhoistedDependencies(node) + if (outputReason && !isHoistable) { + reason = `- external soft link with unhoisted dependencies` + } + } + + if (isHoistable) { + isHoistable = !rootNode.peerNames.has(node.name) + if (outputReason && !isHoistable) { + reason = `- cannot shadow peer: ${prettyPrintLocator(rootNode.originalDependencies.get(node.name)!.locator)} at ${reasonRoot}` + } + } + + if (isHoistable) { + let isNameAvailable = false + const usedDep = usedDependencies.get(node.name) + isNameAvailable = !usedDep || usedDep.ident === node.ident + if (outputReason && !isNameAvailable) reason = `- filled by: ${prettyPrintLocator(usedDep!.locator)} at ${reasonRoot}` + if (isNameAvailable) { + for (let idx = nodePath.length - 1; idx >= 1; idx--) { + const parent = nodePath[idx] + const parentDep = parent.dependencies.get(node.name) + if (parentDep && parentDep.ident !== node.ident) { + isNameAvailable = false + let shadowedNames = shadowedNodes.get(parentNode) + if (!shadowedNames) { + shadowedNames = new Set() + shadowedNodes.set(parentNode, shadowedNames) + } + shadowedNames.add(node.name) + if (outputReason) + reason = `- filled by ${prettyPrintLocator(parentDep.locator)} at ${nodePath + .slice(0, idx) + .map(x => prettyPrintLocator(x.locator)) + .join(`→`)}` + break + } + } + } + + isHoistable = isNameAvailable + } + + if (isHoistable) { + const hoistedIdent = hoistIdents.get(node.name) + isHoistable = hoistedIdent === node.ident + if (outputReason && !isHoistable) { + reason = `- filled by: ${prettyPrintLocator(hoistIdentMap.get(node.name)![0])} at ${reasonRoot}` + } + } + + if (isHoistable) { + let arePeerDepsSatisfied = true + const checkList = new Set(node.peerNames) + for (let idx = nodePath.length - 1; idx >= 1; idx--) { + const parent = nodePath[idx] + for (const name of checkList) { + if (parent.peerNames.has(name) && parent.originalDependencies.has(name)) continue + + const parentDepNode = parent.dependencies.get(name) + if (parentDepNode && rootNode.dependencies.get(name) !== parentDepNode) { + if (idx === nodePath.length - 1) { + dependsOn!.add(parentDepNode) + } else { + dependsOn = null + arePeerDepsSatisfied = false + if (outputReason) { + reason = `- peer dependency ${prettyPrintLocator(parentDepNode.locator)} from parent ${prettyPrintLocator(parent.locator)} was not hoisted to ${reasonRoot}` + } + } + } + checkList.delete(name) + } + if (!arePeerDepsSatisfied) { + break + } + } + isHoistable = arePeerDepsSatisfied + } + + if (isHoistable && !fastLookupPossible) { + for (const origDep of node.hoistedDependencies.values()) { + const usedDep = usedDependencies.get(origDep.name) || rootNode.dependencies.get(origDep.name) + if (!usedDep || origDep.ident !== usedDep.ident) { + isHoistable = false + if (outputReason) reason = `- previously hoisted dependency mismatch, needed: ${prettyPrintLocator(origDep.locator)}, available: ${prettyPrintLocator(usedDep?.locator)}` + + break + } + } + } + + if (dependsOn !== null && dependsOn.size > 0) { + return { isHoistable: Hoistable.DEPENDS, dependsOn, reason } + } else { + return { isHoistable: isHoistable ? Hoistable.YES : Hoistable.NO, reason } + } +} + +const getAliasedLocator = (node: HoisterWorkTree): AliasedLocator => `${node.name}@${node.locator}` as AliasedLocator + +/** + * Performs actual graph transformation, by hoisting packages to the root node. + * + * @param tree dependency tree + * @param rootNodePath root node path in the tree + * @param rootNodePathLocators a set of locators for nodes that lead from the top of the tree up to root node + * @param usedDependencies map of dependency nodes from parents of root node used by root node and its children via parent lookup + * @param hoistIdents idents that should be attempted to be hoisted to the root node + */ +const hoistGraph = ( + tree: HoisterWorkTree, + rootNodePath: Array, + rootNodePathLocators: Set, + usedDependencies: Map, + hoistIdents: Map, + hoistIdentMap: Map>, + parentShadowedNodes: ShadowedNodes, + shadowedNodes: ShadowedNodes, + options: InternalHoistOptions +): { anotherRoundNeeded: boolean; isGraphChanged: boolean } => { + const rootNode = rootNodePath[rootNodePath.length - 1] + const seenNodes = new Set() + let anotherRoundNeeded = false + let isGraphChanged = false + + const hoistNodeDependencies = ( + nodePath: Array, + locatorPath: Array, + aliasedLocatorPath: Array, + parentNode: HoisterWorkTree, + newNodes: Set + ) => { + if (seenNodes.has(parentNode)) return + const nextLocatorPath = [...locatorPath, getAliasedLocator(parentNode)] + const nextAliasedLocatorPath = [...aliasedLocatorPath, getAliasedLocator(parentNode)] + + const dependantTree = new Map>() + const hoistInfos = new Map() + for (const subDependency of getSortedRegularDependencies(parentNode)) { + const hoistInfo = getNodeHoistInfo( + rootNode, + rootNodePathLocators, + [rootNode, ...nodePath, parentNode], + subDependency, + usedDependencies, + hoistIdents, + hoistIdentMap, + shadowedNodes, + { outputReason: options.debugLevel >= DebugLevel.REASONS, fastLookupPossible: options.fastLookupPossible } + ) + + hoistInfos.set(subDependency, hoistInfo) + if (hoistInfo.isHoistable === Hoistable.DEPENDS) { + for (const node of hoistInfo.dependsOn) { + const nodeDependants = dependantTree.get(node.name) || new Set() + nodeDependants.add(subDependency.name) + dependantTree.set(node.name, nodeDependants) + } + } + } + + const unhoistableNodes = new Set() + const addUnhoistableNode = (node: HoisterWorkTree, hoistInfo: HoistInfo, reason: string) => { + if (!unhoistableNodes.has(node)) { + unhoistableNodes.add(node) + hoistInfos.set(node, { isHoistable: Hoistable.NO, reason }) + for (const dependantName of dependantTree.get(node.name) || []) { + addUnhoistableNode( + parentNode.dependencies.get(dependantName)!, + hoistInfo, + options.debugLevel >= DebugLevel.REASONS + ? `- peer dependency ${prettyPrintLocator(node.locator)} from parent ${prettyPrintLocator(parentNode.locator)} was not hoisted` + : `` + ) + } + } + } + + for (const [node, hoistInfo] of hoistInfos) if (hoistInfo.isHoistable === Hoistable.NO) addUnhoistableNode(node, hoistInfo, hoistInfo.reason!) + + let wereNodesHoisted = false + for (const node of hoistInfos.keys()) { + if (!unhoistableNodes.has(node)) { + isGraphChanged = true + const shadowedNames = parentShadowedNodes.get(parentNode) + if (shadowedNames && shadowedNames.has(node.name)) anotherRoundNeeded = true + + wereNodesHoisted = true + parentNode.dependencies.delete(node.name) + parentNode.hoistedDependencies.set(node.name, node) + parentNode.reasons.delete(node.name) + + const hoistedNode = rootNode.dependencies.get(node.name) + if (options.debugLevel >= DebugLevel.REASONS) { + const hoistedFrom = Array.from(locatorPath) + .concat([parentNode.locator]) + .map(x => prettyPrintLocator(x)) + .join(`→`) + let hoistedFromArray = rootNode.hoistedFrom.get(node.name) + if (!hoistedFromArray) { + hoistedFromArray = [] + rootNode.hoistedFrom.set(node.name, hoistedFromArray) + } + hoistedFromArray.push(hoistedFrom) + + parentNode.hoistedTo.set( + node.name, + Array.from(rootNodePath) + .map(x => prettyPrintLocator(x.locator)) + .join(`→`) + ) + } + // Add hoisted node to root node, in case it is not already there + if (!hoistedNode) { + // Avoid adding other version of root node to itself + if (rootNode.ident !== node.ident) { + rootNode.dependencies.set(node.name, node) + newNodes.add(node) + } + } else { + for (const reference of node.references) { + hoistedNode.references.add(reference) + } + } + } + } + + if (parentNode.dependencyKind === HoisterDependencyKind.EXTERNAL_SOFT_LINK && wereNodesHoisted) anotherRoundNeeded = true + + if (options.check) { + const checkLog = selfCheck(tree) + if (checkLog) { + throw new Error( + `${checkLog}, after hoisting dependencies of ${[rootNode, ...nodePath, parentNode].map(x => prettyPrintLocator(x.locator)).join(`→`)}:\n${dumpDepTree(tree)}` + ) + } + } + + const children = getSortedRegularDependencies(parentNode) + for (const node of children) { + if (unhoistableNodes.has(node)) { + const hoistInfo = hoistInfos.get(node)! + const hoistableIdent = hoistIdents.get(node.name) + if ((hoistableIdent === node.ident || !parentNode.reasons.has(node.name)) && hoistInfo.isHoistable !== Hoistable.YES) parentNode.reasons.set(node.name, hoistInfo.reason!) + + if (!node.isHoistBorder && nextAliasedLocatorPath.indexOf(getAliasedLocator(node)) < 0) { + seenNodes.add(parentNode) + const decoupledNode = decoupleGraphNode(parentNode, node) + + hoistNodeDependencies([...nodePath, parentNode], nextLocatorPath, nextAliasedLocatorPath, decoupledNode, nextNewNodes) + + seenNodes.delete(parentNode) + } + } + } + } + + let newNodes + let nextNewNodes = new Set(getSortedRegularDependencies(rootNode)) + const aliasedRootNodePathLocators = Array.from(rootNodePath).map(x => getAliasedLocator(x)) + do { + newNodes = nextNewNodes + nextNewNodes = new Set() + for (const dep of newNodes) { + if (dep.locator === rootNode.locator || dep.isHoistBorder) continue + const decoupledDependency = decoupleGraphNode(rootNode, dep) + + hoistNodeDependencies([], Array.from(rootNodePathLocators), aliasedRootNodePathLocators, decoupledDependency, nextNewNodes) + } + } while (nextNewNodes.size > 0) + + return { anotherRoundNeeded, isGraphChanged } +} + +const selfCheck = (tree: HoisterWorkTree): string => { + const log: Array = [] + + const seenNodes = new Set() + const parents = new Set() + + const checkNode = (node: HoisterWorkTree, parentDeps: Map, parent: HoisterWorkTree) => { + if (seenNodes.has(node)) return + seenNodes.add(node) + + if (parents.has(node)) return + + const dependencies = new Map(parentDeps) + for (const dep of node.dependencies.values()) if (!node.peerNames.has(dep.name)) dependencies.set(dep.name, dep) + + for (const origDep of node.originalDependencies.values()) { + const dep = dependencies.get(origDep.name) + const prettyPrintTreePath = () => + `${Array.from(parents) + .concat([node]) + .map(x => prettyPrintLocator(x.locator)) + .join(`→`)}` + if (node.peerNames.has(origDep.name)) { + const parentDep = parentDeps.get(origDep.name) + if (parentDep !== dep || !parentDep || parentDep.ident !== origDep.ident) { + log.push(`${prettyPrintTreePath()} - broken peer promise: expected ${origDep.ident} but found ${parentDep ? parentDep.ident : parentDep}`) + } + } else { + const hoistedFrom = parent.hoistedFrom.get(node.name) + const originalHoistedTo = node.hoistedTo.get(origDep.name) + const prettyHoistedFrom = `${hoistedFrom ? ` hoisted from ${hoistedFrom.join(`, `)}` : ``}` + const prettyOriginalHoistedTo = `${originalHoistedTo ? ` hoisted to ${originalHoistedTo}` : ``}` + const prettyNodePath = `${prettyPrintTreePath()}${prettyHoistedFrom}` + if (!dep) { + log.push(`${prettyNodePath} - broken require promise: no required dependency ${origDep.name}${prettyOriginalHoistedTo} found`) + } else if (dep.ident !== origDep.ident) { + log.push(`${prettyNodePath} - broken require promise for ${origDep.name}${prettyOriginalHoistedTo}: expected ${origDep.ident}, but found: ${dep.ident}`) + } + } + } + + parents.add(node) + for (const dep of node.dependencies.values()) { + if (!node.peerNames.has(dep.name)) { + checkNode(dep, dependencies, node) + } + } + parents.delete(node) + } + + checkNode(tree, tree.dependencies, tree) + + return log.join(`\n`) +} + +/** + * Creates a clone of package tree with extra fields used for hoisting purposes. + * + * @param tree package tree clone + */ +const cloneTree = (tree: HoisterTree, options: InternalHoistOptions): HoisterWorkTree => { + const { identName, name, reference, peerNames } = tree + const treeCopy: HoisterWorkTree = { + name, + references: new Set([reference]), + locator: makeLocator(identName, reference), + ident: makeIdent(identName, reference), + dependencies: new Map(), + originalDependencies: new Map(), + hoistedDependencies: new Map(), + peerNames: new Set(peerNames), + reasons: new Map(), + decoupled: true, + isHoistBorder: true, + hoistPriority: 0, + dependencyKind: HoisterDependencyKind.WORKSPACE, + hoistedFrom: new Map(), + hoistedTo: new Map(), + } + + const seenNodes = new Map([[tree, treeCopy]]) + + const addNode = (node: HoisterTree, parentNode: HoisterWorkTree) => { + let workNode = seenNodes.get(node) + const isSeen = !!workNode + if (!workNode) { + const { name, identName, reference, peerNames, hoistPriority, dependencyKind } = node + const dependenciesNmHoistingLimits = options.hoistingLimits.get(parentNode.locator) + workNode = { + name, + references: new Set([reference]), + locator: makeLocator(identName, reference), + ident: makeIdent(identName, reference), + dependencies: new Map(), + originalDependencies: new Map(), + hoistedDependencies: new Map(), + peerNames: new Set(peerNames), + reasons: new Map(), + decoupled: true, + isHoistBorder: dependenciesNmHoistingLimits ? dependenciesNmHoistingLimits.has(name) : false, + hoistPriority: hoistPriority || 0, + dependencyKind: dependencyKind || HoisterDependencyKind.REGULAR, + hoistedFrom: new Map(), + hoistedTo: new Map(), + } + seenNodes.set(node, workNode) + } + + parentNode.dependencies.set(node.name, workNode) + parentNode.originalDependencies.set(node.name, workNode) + + if (!isSeen) { + for (const dep of node.dependencies) { + addNode(dep, workNode) + } + } else { + const seenCoupledNodes = new Set() + + const markNodeCoupled = (node: HoisterWorkTree) => { + if (seenCoupledNodes.has(node)) return + seenCoupledNodes.add(node) + node.decoupled = false + + for (const dep of node.dependencies.values()) { + if (!node.peerNames.has(dep.name)) { + markNodeCoupled(dep) + } + } + } + + markNodeCoupled(workNode) + } + } + + for (const dep of tree.dependencies) addNode(dep, treeCopy) + + return treeCopy +} + +const getIdentName = (locator: Locator) => locator.substring(0, locator.indexOf(`@`, 1)) + +/** + * Creates a clone of hoisted package tree with extra fields removed + * + * @param tree stripped down hoisted package tree clone + */ +const shrinkTree = (tree: HoisterWorkTree): HoisterResult => { + const treeCopy: HoisterResult = { + name: tree.name, + identName: getIdentName(tree.locator), + references: new Set(tree.references), + dependencies: new Set(), + } + + const seenNodes = new Set([tree]) + + const addNode = (node: HoisterWorkTree, parentWorkNode: HoisterWorkTree, parentNode: HoisterResult) => { + const isSeen = seenNodes.has(node) + + let resultNode: HoisterResult + if (parentWorkNode === node) { + resultNode = parentNode + } else { + const { name, references, locator } = node + resultNode = { + name, + identName: getIdentName(locator), + references, + dependencies: new Set(), + } + } + parentNode.dependencies.add(resultNode) + + if (!isSeen) { + seenNodes.add(node) + for (const dep of node.dependencies.values()) { + if (!node.peerNames.has(dep.name)) { + addNode(dep, node, resultNode) + } + } + seenNodes.delete(node) + } + } + + for (const dep of tree.dependencies.values()) addNode(dep, tree, treeCopy) + + return treeCopy +} + +/** + * Builds mapping, where key is an alias + dependent package ident and the value is the list of + * parent package idents who depend on this package. + * + * @param rootNode package tree root node + * + * @returns preference map + */ +const buildPreferenceMap = (rootNode: HoisterWorkTree): PreferenceMap => { + const preferenceMap: PreferenceMap = new Map() + + const seenNodes = new Set([rootNode]) + const getPreferenceKey = (node: HoisterWorkTree) => `${node.name}@${node.ident}` + + const getOrCreatePreferenceEntry = (node: HoisterWorkTree) => { + const key = getPreferenceKey(node) + let entry = preferenceMap.get(key) + if (!entry) { + entry = { dependents: new Set(), peerDependents: new Set(), hoistPriority: 0 } + preferenceMap.set(key, entry) + } + return entry + } + + const addDependent = (dependent: HoisterWorkTree, node: HoisterWorkTree) => { + const isSeen = !!seenNodes.has(node) + + const entry = getOrCreatePreferenceEntry(node) + entry.dependents.add(dependent.ident) + + if (!isSeen) { + seenNodes.add(node) + for (const dep of node.dependencies.values()) { + const entry = getOrCreatePreferenceEntry(dep) + entry.hoistPriority = Math.max(entry.hoistPriority, dep.hoistPriority) + if (node.peerNames.has(dep.name)) { + entry.peerDependents.add(node.ident) + } else { + addDependent(node, dep) + } + } + } + } + + for (const dep of rootNode.dependencies.values()) if (!rootNode.peerNames.has(dep.name)) addDependent(rootNode, dep) + + return preferenceMap +} + +const prettyPrintLocator = (locator?: Locator) => { + if (!locator) return `none` + + const idx = locator.indexOf(`@`, 1) + let name = locator.substring(0, idx) + if (name.endsWith(`$wsroot$`)) name = `wh:${name.replace(`$wsroot$`, ``)}` + const reference = locator.substring(idx + 1) + if (reference === `workspace:.`) { + return `.` + } else if (!reference) { + return `${name}` + } else { + let version = (reference.indexOf(`#`) > 0 ? reference.split(`#`)[1] : reference).replace(`npm:`, ``) + if (reference.startsWith(`virtual`)) name = `v:${name}` + if (version.startsWith(`workspace`)) { + name = `w:${name}` + version = `` + } + + return `${name}${version ? `@${version}` : ``}` + } +} + +const MAX_NODES_TO_DUMP = 50000 + +/** + * Pretty-prints dependency tree in the `yarn why`-like format + * + * The function is used for troubleshooting purposes only. + * + * @param pkg node_modules tree + * + * @returns sorted node_modules tree + */ + +const dumpDepTree = (tree: HoisterWorkTree) => { + let nodeCount = 0 + const dumpPackage = (pkg: HoisterWorkTree, parents: Set, prefix = ``): string => { + if (nodeCount > MAX_NODES_TO_DUMP || parents.has(pkg)) return `` + + nodeCount++ + const dependencies = Array.from(pkg.dependencies.values()).sort((n1, n2) => { + if (n1.name === n2.name) { + return 0 + } else { + return n1.name > n2.name ? 1 : -1 + } + }) + + let str = `` + parents.add(pkg) + for (let idx = 0; idx < dependencies.length; idx++) { + const dep = dependencies[idx] + if (!pkg.peerNames.has(dep.name) && dep !== pkg) { + const reason = pkg.reasons.get(dep.name) + const identName = getIdentName(dep.locator) + str += `${prefix}${idx < dependencies.length - 1 ? `├─` : `└─`}${(parents.has(dep) ? `>` : ``) + (identName !== dep.name ? `a:${dep.name}:` : ``) + prettyPrintLocator(dep.locator) + (reason ? ` ${reason}` : ``)}\n` + str += dumpPackage(dep, parents, `${prefix}${idx < dependencies.length - 1 ? `│ ` : ` `}`) + } + } + parents.delete(pkg) + return str + } + + const treeDump = dumpPackage(tree, new Set()) + + return treeDump + (nodeCount > MAX_NODES_TO_DUMP ? `\nTree is too large, part of the tree has been dunped\n` : ``) +} diff --git a/packages/app-builder-lib/src/node-module-collector/index.ts b/packages/app-builder-lib/src/node-module-collector/index.ts new file mode 100644 index 00000000000..c1334bd1efb --- /dev/null +++ b/packages/app-builder-lib/src/node-module-collector/index.ts @@ -0,0 +1,28 @@ +import { NpmNodeModulesCollector } from "./npmNodeModulesCollector" +import { PnpmNodeModulesCollector } from "./pnpmNodeModulesCollector" +import { YarnNodeModulesCollector } from "./yarnNodeModulesCollector" +import { detect, PM, getNpmVersion } from "./packageManager" +import { NodeModuleInfo } from "./types" +import { log } from "builder-util" + +async function getCollectorByPackageManager(rootDir: string) { + const manager: PM = await detect({ cwd: rootDir }) + switch (manager) { + case "npm": + return new NpmNodeModulesCollector(rootDir) + case "pnpm": + return new PnpmNodeModulesCollector(rootDir) + case "yarn": + return new YarnNodeModulesCollector(rootDir) + default: + log.warn({ rootDir }, `Cannot detect lock file to determine node_modules structure. Assuming plain structure.`) + return new NpmNodeModulesCollector(rootDir) + } +} + +export async function getNodeModules(rootDir: string): Promise { + const collector = await getCollectorByPackageManager(rootDir) + return collector.getNodeModules() +} + +export { detect, getNpmVersion, PM } diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts new file mode 100644 index 00000000000..cc2ec2b1ca8 --- /dev/null +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -0,0 +1,110 @@ +import { hoist, type HoisterTree, type HoisterResult } from "./hoist" +import path from "path" +import { NodeModuleInfo, DependencyTree, DependencyGraph } from "./types" +import { log } from "builder-util" + +export abstract class NodeModulesCollector { + private nodeModules: NodeModuleInfo[] + protected rootDir: string + protected dependencyPathMap: Map + + constructor(rootDir: string) { + this.dependencyPathMap = new Map() + this.nodeModules = [] + this.rootDir = rootDir + } + + private transToHoisterTree(obj: DependencyGraph, key: string = `.`, nodes: Map = new Map()): HoisterTree { + let node = nodes.get(key) + const name = key.match(/@?[^@]+/)![0] + if (!node) { + node = { + name, + identName: name, + reference: key.match(/@?[^@]+@?(.+)?/)![1] || ``, + dependencies: new Set(), + peerNames: new Set([]), + } + nodes.set(key, node) + + for (const dep of (obj[key] || {}).dependencies || []) { + node.dependencies.add(this.transToHoisterTree(obj, dep, nodes)) + } + } + return node + } + + public TransToDependencyGraph(tree: DependencyTree): DependencyGraph { + const result: DependencyGraph = { ".": {} } + + const flatten = (node: DependencyTree, parentKey = ".") => { + const dependencies = node.dependencies || {} + + for (const [key, value] of Object.entries(dependencies)) { + // Skip empty dependencies(like some optionalDependencies) + if (Object.keys(value).length === 0) { + continue + } + const version = value.version || "" + const newKey = `${key}@${version}` + this.dependencyPathMap.set(newKey, path.normalize(value.path)) + if (!result[parentKey]?.dependencies) { + result[parentKey] = { dependencies: [] } + } else { + result[parentKey].dependencies.push(newKey) + } + flatten(value, newKey) + } + } + + flatten(tree) + return result + } + + abstract getDependenciesTree(): DependencyTree + abstract getPMCommand(): string + + private _getNodeModules(dependencies: Set, result: NodeModuleInfo[]) { + if (dependencies.size === 0) return + + for (const d of dependencies.values()) { + const reference = [...d.references][0] + const p = this.dependencyPathMap.get(`${d.name}@${reference}`) + if (p === undefined) { + log.warn(`Cannot find path for ${d.name}@${reference}`) + continue + } + const node = { + name: d.name, + version: reference, + dir: p, + } as NodeModuleInfo + result.push(node) + if (d.dependencies.size > 0) { + node["dependencies"] = [] + this._getNodeModules(d.dependencies, node["dependencies"]) + } + } + result.sort((a, b) => a.name.localeCompare(b.name)) + } + + private getTreeFromWorkspaces(tree: DependencyTree): DependencyTree { + if (tree.workspaces && tree.dependencies) { + for (const [key, value] of Object.entries(tree.dependencies)) { + if (this.rootDir.endsWith(path.normalize(key))) { + return value + } + } + } + return tree + } + + public getNodeModules(): NodeModuleInfo[] { + const tree = this.getDependenciesTree() + const realTree = this.getTreeFromWorkspaces(tree) + const dependencyGraph = this.TransToDependencyGraph(realTree) + const hoisterResult = hoist(this.transToHoisterTree(dependencyGraph), { check: true }) + this._getNodeModules(hoisterResult.dependencies, this.nodeModules) + return this.nodeModules + } +} diff --git a/packages/app-builder-lib/src/node-module-collector/npmNodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/npmNodeModulesCollector.ts new file mode 100644 index 00000000000..2399e4de911 --- /dev/null +++ b/packages/app-builder-lib/src/node-module-collector/npmNodeModulesCollector.ts @@ -0,0 +1,24 @@ +import { execSync } from "child_process" +import { NodeModulesCollector } from "./nodeModulesCollector" +import { DependencyTree } from "./types" + +export class NpmNodeModulesCollector extends NodeModulesCollector { + constructor(rootDir: string) { + super(rootDir) + } + + getPMCommand(): string { + const cmd = process.platform === "win32" ? "npm.cmd" : "npm" + return `${cmd} list --omit dev -a --json --long` + } + + getDependenciesTree(): DependencyTree { + const npmListOutput = execSync(this.getPMCommand(), { + cwd: this.rootDir, + encoding: "utf-8", + }) + + const dependencyTree: DependencyTree = JSON.parse(npmListOutput) + return dependencyTree + } +} diff --git a/packages/app-builder-lib/src/node-module-collector/packageManager.ts b/packages/app-builder-lib/src/node-module-collector/packageManager.ts new file mode 100644 index 00000000000..ca433749282 --- /dev/null +++ b/packages/app-builder-lib/src/node-module-collector/packageManager.ts @@ -0,0 +1,112 @@ +// copy from https://github.com/egoist/detect-package-manager/blob/main/src/index.ts +// and merge https://github.com/egoist/detect-package-manager/pull/9 to support Monorepo +import { promises as fs } from "fs" +import { resolve, dirname } from "path" +import { exec } from "child_process" +import { promisify } from "util" + +const execa = promisify(exec) + +export type PM = "npm" | "yarn" | "pnpm" | "bun" + +/** + * Check if a path exists + */ +async function pathExists(p: string) { + try { + await fs.access(p) + return true + } catch { + return false + } +} + +const cache = new Map() + +/** + * Check if a global pm is available + */ +function hasGlobalInstallation(pm: PM): Promise { + const key = `has_global_${pm}` + if (cache.has(key)) { + return Promise.resolve(cache.get(key)) + } + const execa = promisify(exec) + + return execa(`${pm} --version`) + .then(res => { + return /^\d+.\d+.\d+$/.test(res.stdout) + }) + .then(value => { + cache.set(key, value) + return value + }) + .catch(() => false) +} + +function getTypeofLockFile(cwd = "."): Promise { + const key = `lockfile_${cwd}` + if (cache.has(key)) { + return Promise.resolve(cache.get(key)) + } + + return Promise.all([ + pathExists(resolve(cwd, "yarn.lock")), + pathExists(resolve(cwd, "package-lock.json")), + pathExists(resolve(cwd, "pnpm-lock.yaml")), + pathExists(resolve(cwd, "bun.lockb")), + ]).then(([isYarn, isNpm, isPnpm, isBun]) => { + let value: PM | null = null + + if (isYarn) { + value = "yarn" + } else if (isPnpm) { + value = "pnpm" + } else if (isBun) { + value = "bun" + } else if (isNpm) { + value = "npm" + } + + cache.set(key, value) + return value + }) +} + +const detect = async ({ cwd, includeGlobalBun }: { cwd?: string; includeGlobalBun?: boolean } = {}) => { + let type = await getTypeofLockFile(cwd) + if (type) { + return type + } + + let tmpCwd = cwd || "." + for (let i = 1; i <= 5; i++) { + tmpCwd = dirname(tmpCwd) + type = await getTypeofLockFile(tmpCwd) + if (type) { + return type + } + } + + const [hasYarn, hasPnpm, hasBun] = await Promise.all([hasGlobalInstallation("yarn"), hasGlobalInstallation("pnpm"), includeGlobalBun && hasGlobalInstallation("bun")]) + if (hasYarn) { + return "yarn" + } + if (hasPnpm) { + return "pnpm" + } + if (hasBun) { + return "bun" + } + return "npm" +} + +export { detect } + +export function getNpmVersion(pm: PM) { + return execa(`${pm} --version`).then(res => res.stdout) +} + +export function clearCache() { + return cache.clear() +} diff --git a/packages/app-builder-lib/src/node-module-collector/pnpmNodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/pnpmNodeModulesCollector.ts new file mode 100644 index 00000000000..7b9bcef7509 --- /dev/null +++ b/packages/app-builder-lib/src/node-module-collector/pnpmNodeModulesCollector.ts @@ -0,0 +1,24 @@ +import { execSync } from "child_process" +import { NodeModulesCollector } from "./nodeModulesCollector" +import { DependencyTree } from "./types" + +export class PnpmNodeModulesCollector extends NodeModulesCollector { + constructor(rootDir: string) { + super(rootDir) + } + + getPMCommand(): string { + const cmd = process.platform === "win32" ? "pnpm.cmd" : "pnpm" + return `${cmd} list --prod --json --long --depth Infinity` + } + + getDependenciesTree() { + const pnpmListOutput = execSync(this.getPMCommand(), { + cwd: this.rootDir, + encoding: "utf-8", + }) + + const dependencyTree: DependencyTree = JSON.parse(pnpmListOutput)[0] + return dependencyTree + } +} diff --git a/packages/app-builder-lib/src/node-module-collector/types.ts b/packages/app-builder-lib/src/node-module-collector/types.ts new file mode 100644 index 00000000000..475d7b349b9 --- /dev/null +++ b/packages/app-builder-lib/src/node-module-collector/types.ts @@ -0,0 +1,25 @@ +export interface NodeModuleInfo { + name: string + version: string + dir: string + dependencies?: Array +} + +export interface DependencyTree { + readonly version?: string + readonly name?: string + readonly from?: string + readonly workspaces?: string[] + readonly path: string + dependencies: { + [packageName: string]: DependencyTree + } +} + +export interface DependencyGraph { + [packageNameAndVersion: string]: PackageDependencies +} + +interface PackageDependencies { + dependencies?: string[] +} diff --git a/packages/app-builder-lib/src/node-module-collector/yarnNodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/yarnNodeModulesCollector.ts new file mode 100644 index 00000000000..1631c0f0928 --- /dev/null +++ b/packages/app-builder-lib/src/node-module-collector/yarnNodeModulesCollector.ts @@ -0,0 +1,24 @@ +import { execSync } from "child_process" +import { NodeModulesCollector } from "./nodeModulesCollector" +import { DependencyTree } from "./types" + +export class YarnNodeModulesCollector extends NodeModulesCollector { + constructor(rootDir: string) { + super(rootDir) + } + + getPMCommand(): string { + const cmd = process.platform === "win32" ? "npm.cmd" : "npm" + return `${cmd} list --omit dev -a --json --long` + } + + getDependenciesTree() { + const npmListOutput = execSync(this.getPMCommand(), { + cwd: this.rootDir, + encoding: "utf-8", + }) + + const dependencyTree: DependencyTree = JSON.parse(npmListOutput) + return dependencyTree + } +} diff --git a/packages/app-builder-lib/src/util/appFileCopier.ts b/packages/app-builder-lib/src/util/appFileCopier.ts index b56bd3c8ab1..8fc6eb35ee0 100644 --- a/packages/app-builder-lib/src/util/appFileCopier.ts +++ b/packages/app-builder-lib/src/util/appFileCopier.ts @@ -13,7 +13,7 @@ import { PlatformPackager } from "../platformPackager" import { AppFileWalker } from "./AppFileWalker" import { NodeModuleCopyHelper } from "./NodeModuleCopyHelper" import { NodeModuleInfo } from "./packageDependencies" -import { getNodeModules } from "node-module-collector" +import { getNodeModules } from "../node-module-collector" const BOWER_COMPONENTS_PATTERN = `${path.sep}bower_components${path.sep}` /** @internal */ diff --git a/packages/app-builder-lib/src/util/yarn.ts b/packages/app-builder-lib/src/util/yarn.ts index 62007725bfe..e0f655015af 100644 --- a/packages/app-builder-lib/src/util/yarn.ts +++ b/packages/app-builder-lib/src/util/yarn.ts @@ -10,7 +10,7 @@ import { getProjectRootPath } from "@electron/rebuild/lib/search-module" import { rebuild as remoteRebuild } from "./rebuild/rebuild" import { executeAppBuilderAndWriteJson } from "./appBuilder" import { RebuildMode } from "@electron/rebuild/lib/types" -import { PM, detect, getNpmVersion } from "node-module-collector" +import { PM, detect, getNpmVersion } from "../node-module-collector" export async function installOrRebuild(config: Configuration, appDir: string, options: RebuildOptions, forceInstall = false) { const effectiveOptions: RebuildOptions = { From 09cdecd03dcae03934fbf7e840cd62bd709d3552 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Tue, 8 Oct 2024 23:33:13 +0800 Subject: [PATCH 46/85] update lock file --- pnpm-lock.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8144d3030a3..9a014a3a79a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -161,9 +161,6 @@ importers: minimatch: specifier: ^10.0.0 version: 10.0.1 - node-module-collector: - specifier: 1.1.4 - version: 1.1.4 resedit: specifier: ^1.7.0 version: 1.7.1 @@ -4931,9 +4928,6 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-module-collector@1.1.4: - resolution: {integrity: sha512-GFpfLl37pOP/IMZ0VdEqBgDvJ6lpXGYwJuwjw62Gp3VJV9ys/QhHwePDC2DSelK2LW4ORs/HJOmp/9Huosy6Ow==} - node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -11985,8 +11979,6 @@ snapshots: node-int64@0.4.0: {} - node-module-collector@1.1.4: {} - node-releases@2.0.14: {} nopt@1.0.10: From 1227c00f8efdd9b460c8c431f6961e20d194d9f4 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Tue, 8 Oct 2024 23:41:05 +0800 Subject: [PATCH 47/85] format code --- .../src/node-module-collector/nodeModulesCollector.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index cc2ec2b1ca8..bb442242d8b 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -48,11 +48,10 @@ export abstract class NodeModulesCollector { const version = value.version || "" const newKey = `${key}@${version}` this.dependencyPathMap.set(newKey, path.normalize(value.path)) - if (!result[parentKey]?.dependencies) { - result[parentKey] = { dependencies: [] } - } else { - result[parentKey].dependencies.push(newKey) + if (!result[parentKey].dependencies) { + result[parentKey].dependencies = [] } + result[parentKey].dependencies.push(newKey) flatten(value, newKey) } } From 600958ccb75828b6cbd6f6902f3d97981378f28e Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Tue, 8 Oct 2024 23:45:39 +0800 Subject: [PATCH 48/85] format code --- .../src/node-module-collector/nodeModulesCollector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index bb442242d8b..a360079c0af 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -1,5 +1,5 @@ import { hoist, type HoisterTree, type HoisterResult } from "./hoist" -import path from "path" +import * as path from "path" import { NodeModuleInfo, DependencyTree, DependencyGraph } from "./types" import { log } from "builder-util" From ce21b4168de73e36ef0e5696bac192b918f9ad02 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Tue, 8 Oct 2024 23:56:03 +0800 Subject: [PATCH 49/85] format code --- .../src/node-module-collector/nodeModulesCollector.ts | 2 +- packages/app-builder-lib/src/node-module-collector/types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index a360079c0af..ca13fddd737 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -35,7 +35,7 @@ export abstract class NodeModulesCollector { } public TransToDependencyGraph(tree: DependencyTree): DependencyGraph { - const result: DependencyGraph = { ".": {} } + const result: DependencyGraph = { ".": { dependencies: [] } } const flatten = (node: DependencyTree, parentKey = ".") => { const dependencies = node.dependencies || {} diff --git a/packages/app-builder-lib/src/node-module-collector/types.ts b/packages/app-builder-lib/src/node-module-collector/types.ts index 475d7b349b9..2c99e541847 100644 --- a/packages/app-builder-lib/src/node-module-collector/types.ts +++ b/packages/app-builder-lib/src/node-module-collector/types.ts @@ -21,5 +21,5 @@ export interface DependencyGraph { } interface PackageDependencies { - dependencies?: string[] + dependencies: string[] } From 42bafe19ab4bcc66457bcd4135a5a7753b5c2d5e Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 9 Oct 2024 00:08:42 +0800 Subject: [PATCH 50/85] format code --- .../nodeModulesCollector.ts | 35 +++++++++---------- .../src/node-module-collector/types.ts | 2 +- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index ca13fddd737..d46732662ef 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -1,7 +1,10 @@ -import { hoist, type HoisterTree, type HoisterResult } from "./hoist" -import * as path from "path" +import { + hoist, + type HoisterTree, + type HoisterResult, +} from "./hoist" +import path from 'path' import { NodeModuleInfo, DependencyTree, DependencyGraph } from "./types" -import { log } from "builder-util" export abstract class NodeModulesCollector { private nodeModules: NodeModuleInfo[] @@ -23,7 +26,7 @@ export abstract class NodeModulesCollector { identName: name, reference: key.match(/@?[^@]+@?(.+)?/)![1] || ``, dependencies: new Set(), - peerNames: new Set([]), + peerNames: new Set([]) } nodes.set(key, node) @@ -35,7 +38,7 @@ export abstract class NodeModulesCollector { } public TransToDependencyGraph(tree: DependencyTree): DependencyGraph { - const result: DependencyGraph = { ".": { dependencies: [] } } + const result: DependencyGraph = { ".": {} } const flatten = (node: DependencyTree, parentKey = ".") => { const dependencies = node.dependencies || {} @@ -48,10 +51,10 @@ export abstract class NodeModulesCollector { const version = value.version || "" const newKey = `${key}@${version}` this.dependencyPathMap.set(newKey, path.normalize(value.path)) - if (!result[parentKey].dependencies) { - result[parentKey].dependencies = [] + if (!result[parentKey]?.dependencies) { + result[parentKey] = { dependencies: [] } } - result[parentKey].dependencies.push(newKey) + result[parentKey].dependencies!.push(newKey) flatten(value, newKey) } } @@ -66,22 +69,18 @@ export abstract class NodeModulesCollector { private _getNodeModules(dependencies: Set, result: NodeModuleInfo[]) { if (dependencies.size === 0) return - for (const d of dependencies.values()) { + for (let d of dependencies.values()) { const reference = [...d.references][0] const p = this.dependencyPathMap.get(`${d.name}@${reference}`) - if (p === undefined) { - log.warn(`Cannot find path for ${d.name}@${reference}`) - continue - } - const node = { + let node = { name: d.name, version: reference, - dir: p, + dir: p } as NodeModuleInfo result.push(node) if (d.dependencies.size > 0) { - node["dependencies"] = [] - this._getNodeModules(d.dependencies, node["dependencies"]) + node['dependencies'] = [] + this._getNodeModules(d.dependencies, node['dependencies']) } } result.sort((a, b) => a.name.localeCompare(b.name)) @@ -106,4 +105,4 @@ export abstract class NodeModulesCollector { this._getNodeModules(hoisterResult.dependencies, this.nodeModules) return this.nodeModules } -} +} \ No newline at end of file diff --git a/packages/app-builder-lib/src/node-module-collector/types.ts b/packages/app-builder-lib/src/node-module-collector/types.ts index 2c99e541847..475d7b349b9 100644 --- a/packages/app-builder-lib/src/node-module-collector/types.ts +++ b/packages/app-builder-lib/src/node-module-collector/types.ts @@ -21,5 +21,5 @@ export interface DependencyGraph { } interface PackageDependencies { - dependencies: string[] + dependencies?: string[] } From f30f7a48adbe7c3411a8bd00981ff5c27f5e7e08 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 9 Oct 2024 00:11:47 +0800 Subject: [PATCH 51/85] format code --- .../nodeModulesCollector.ts | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index d46732662ef..c9f826adf9d 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -1,9 +1,5 @@ -import { - hoist, - type HoisterTree, - type HoisterResult, -} from "./hoist" -import path from 'path' +import { hoist, type HoisterTree, type HoisterResult } from "./hoist" +import path from "path" import { NodeModuleInfo, DependencyTree, DependencyGraph } from "./types" export abstract class NodeModulesCollector { @@ -26,7 +22,7 @@ export abstract class NodeModulesCollector { identName: name, reference: key.match(/@?[^@]+@?(.+)?/)![1] || ``, dependencies: new Set(), - peerNames: new Set([]) + peerNames: new Set([]), } nodes.set(key, node) @@ -69,18 +65,18 @@ export abstract class NodeModulesCollector { private _getNodeModules(dependencies: Set, result: NodeModuleInfo[]) { if (dependencies.size === 0) return - for (let d of dependencies.values()) { + for (const d of dependencies.values()) { const reference = [...d.references][0] const p = this.dependencyPathMap.get(`${d.name}@${reference}`) - let node = { + const node = { name: d.name, version: reference, - dir: p + dir: p, } as NodeModuleInfo result.push(node) if (d.dependencies.size > 0) { - node['dependencies'] = [] - this._getNodeModules(d.dependencies, node['dependencies']) + node["dependencies"] = [] + this._getNodeModules(d.dependencies, node["dependencies"]) } } result.sort((a, b) => a.name.localeCompare(b.name)) @@ -105,4 +101,4 @@ export abstract class NodeModulesCollector { this._getNodeModules(hoisterResult.dependencies, this.nodeModules) return this.nodeModules } -} \ No newline at end of file +} From 6956efc503e7a909a331040904b3f6bfe942a054 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 9 Oct 2024 00:15:57 +0800 Subject: [PATCH 52/85] format code --- .../src/node-module-collector/nodeModulesCollector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index c9f826adf9d..e1c2bbe22e0 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -1,5 +1,5 @@ import { hoist, type HoisterTree, type HoisterResult } from "./hoist" -import path from "path" +import * as path from "path" import { NodeModuleInfo, DependencyTree, DependencyGraph } from "./types" export abstract class NodeModulesCollector { From 29c5d01585a751932f0a789a9919eaab76a3daac Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 9 Oct 2024 09:41:17 +0800 Subject: [PATCH 53/85] fix comments --- .../src/node-module-collector/packageManager.ts | 2 +- packages/app-builder-lib/src/util/yarn.ts | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/packages/app-builder-lib/src/node-module-collector/packageManager.ts b/packages/app-builder-lib/src/node-module-collector/packageManager.ts index ca433749282..b3f0bef5784 100644 --- a/packages/app-builder-lib/src/node-module-collector/packageManager.ts +++ b/packages/app-builder-lib/src/node-module-collector/packageManager.ts @@ -104,7 +104,7 @@ const detect = async ({ cwd, includeGlobalBun }: { cwd?: string; includeGlobalBu export { detect } export function getNpmVersion(pm: PM) { - return execa(`${pm} --version`).then(res => res.stdout) + return execa(`${pm} --version`).then(res => res.stdout.trim()) } export function clearCache() { diff --git a/packages/app-builder-lib/src/util/yarn.ts b/packages/app-builder-lib/src/util/yarn.ts index e0f655015af..a04306e1067 100644 --- a/packages/app-builder-lib/src/util/yarn.ts +++ b/packages/app-builder-lib/src/util/yarn.ts @@ -146,20 +146,14 @@ export async function nodeGypRebuild(platform: NodeJS.Platform, arch: string, fr } function getPackageToolPath(pm: PM) { + const suffix = process.platform === "win32" ? ".cmd" : "" + let cmd = pm + if (process.env.FORCE_YARN === "true") { - return process.platform === "win32" ? "yarn.cmd" : "yarn" + cmd = "yarn" } - switch (pm) { - case "yarn": - return process.platform === "win32" ? "yarn.cmd" : "yarn" - case "pnpm": - return process.platform === "win32" ? "pnpm.cmd" : "pnpm" - case "npm": - return process.platform === "win32" ? "npm.cmd" : "npm" - default: - return process.platform === "win32" ? "npm.cmd" : "npm" - } + return cmd + suffix } function isRunningYarn(pm: PM) { From 81db133a84d6db11b2a1e9d57ad00528b56bbac8 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 9 Oct 2024 23:44:29 +0800 Subject: [PATCH 54/85] fix ut --- test/src/helpers/packTester.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/src/helpers/packTester.ts b/test/src/helpers/packTester.ts index 2b20db275f1..a4edc945178 100644 --- a/test/src/helpers/packTester.ts +++ b/test/src/helpers/packTester.ts @@ -16,6 +16,7 @@ import { promisify } from "util" import pathSorter from "path-sort" import { TmpDir } from "temp-file" import { readAsar } from "app-builder-lib/out/asar/asar" +import { detect, PM } from "app-builder-lib/out/node-module-collector" import { executeAppBuilderAsJson } from "app-builder-lib/out/util/appBuilder" import { CSC_LINK, WIN_CSC_LINK } from "./codeSignData" import { assertThat } from "./fileAssert" @@ -120,7 +121,9 @@ export async function assertPack(fixtureName: string, packagerOptions: PackagerO if (checkOptions.isInstallDepsBefore) { // bin links required (e.g. for node-pre-gyp - if package refers to it in the install script) - await spawn(process.platform === "win32" ? "npm.cmd" : "npm", ["install", "--production", "--legacy-peer-deps"], { + const pm = await detect({ cwd: projectDir }) + let cmd = process.platform === "win32" ? pm+".cmd":pm + await spawn(cmd, ["install"], { cwd: projectDir, }) } From fcbe203b4333d343779658c5ff3a529fb216775a Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 9 Oct 2024 23:47:08 +0800 Subject: [PATCH 55/85] update ut --- test/src/helpers/packTester.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/src/helpers/packTester.ts b/test/src/helpers/packTester.ts index a4edc945178..6925e691fb2 100644 --- a/test/src/helpers/packTester.ts +++ b/test/src/helpers/packTester.ts @@ -16,7 +16,7 @@ import { promisify } from "util" import pathSorter from "path-sort" import { TmpDir } from "temp-file" import { readAsar } from "app-builder-lib/out/asar/asar" -import { detect, PM } from "app-builder-lib/out/node-module-collector" +import { detect } from "app-builder-lib/out/node-module-collector" import { executeAppBuilderAsJson } from "app-builder-lib/out/util/appBuilder" import { CSC_LINK, WIN_CSC_LINK } from "./codeSignData" import { assertThat } from "./fileAssert" From b6b75400a5b633ee907d63936c42baedf7c72093 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 00:50:15 +0800 Subject: [PATCH 56/85] fix ut --- test/snapshots/globTest.js.snap | 9708 +++++++++++++++++++++++++++++++ test/src/globTest.ts | 32 + 2 files changed, 9740 insertions(+) diff --git a/test/snapshots/globTest.js.snap b/test/snapshots/globTest.js.snap index da681125cc6..02fcb138764 100644 --- a/test/snapshots/globTest.js.snap +++ b/test/snapshots/globTest.js.snap @@ -66,6 +66,9714 @@ Object { } `; +exports[`failed peer dep 1`] = ` +Object { + "linux": Array [], +} +`; + +exports[`failed peer dep 2`] = ` +Object { + "files": Object { + "app": Object { + "files": Object { + "package.json": Object { + "files": Object { + "readme.md": Object { + "size": "", + }, + }, + }, + "readme.md": Object { + "size": "", + }, + }, + }, + "index.html": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "node_modules": Object { + "files": Object { + "asap": Object { + "files": Object { + "CHANGES.md": Object { + "size": "", + }, + "LICENSE.md": Object { + "size": "", + }, + "asap.js": Object { + "size": "", + }, + "browser-asap.js": Object { + "size": "", + }, + "browser-raw.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "raw.js": Object { + "size": "", + }, + }, + }, + "classnames": Object { + "files": Object { + ".editorconfig": Object { + "size": "", + }, + "CONTRIBUTING.md": Object { + "size": "", + }, + "LICENSE": Object { + "size": "", + }, + "bower.json": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "tests.js": Object { + "size": "", + }, + }, + }, + "core-js": Object { + "files": Object { + "Gruntfile.js": Object { + "size": "", + }, + "LICENSE": Object { + "size": "", + }, + "bower.json": Object { + "size": "", + }, + "build": Object { + "files": Object { + "Gruntfile.ls": Object { + "size": "", + }, + "build.ls": Object { + "size": "", + }, + "config.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + }, + }, + "client": Object { + "files": Object { + "core.js": Object { + "size": "", + }, + "core.min.js": Object { + "size": "", + }, + "core.min.js.map": Object { + "size": "", + }, + "library.js": Object { + "size": "", + }, + "library.min.js": Object { + "size": "", + }, + "library.min.js.map": Object { + "size": "", + }, + "shim.js": Object { + "size": "", + }, + "shim.min.js": Object { + "size": "", + }, + "shim.min.js.map": Object { + "size": "", + }, + }, + }, + "core": Object { + "files": Object { + "_.js": Object { + "size": "", + }, + "delay.js": Object { + "size": "", + }, + "dict.js": Object { + "size": "", + }, + "function.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "log.js": Object { + "size": "", + }, + "number.js": Object { + "size": "", + }, + "object.js": Object { + "size": "", + }, + "string.js": Object { + "size": "", + }, + }, + }, + "es5": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + }, + }, + "es6": Object { + "files": Object { + "array.js": Object { + "size": "", + }, + "function.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "math.js": Object { + "size": "", + }, + "number.js": Object { + "size": "", + }, + "object.js": Object { + "size": "", + }, + "promise.js": Object { + "size": "", + }, + "reflect.js": Object { + "size": "", + }, + "regexp.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + "string.js": Object { + "size": "", + }, + "symbol.js": Object { + "size": "", + }, + "weak-map.js": Object { + "size": "", + }, + "weak-set.js": Object { + "size": "", + }, + }, + }, + "es7": Object { + "files": Object { + "array.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "object.js": Object { + "size": "", + }, + "regexp.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + "string.js": Object { + "size": "", + }, + }, + }, + "fn": Object { + "files": Object { + "_.js": Object { + "size": "", + }, + "array": Object { + "files": Object { + "concat.js": Object { + "size": "", + }, + "copy-within.js": Object { + "size": "", + }, + "entries.js": Object { + "size": "", + }, + "every.js": Object { + "size": "", + }, + "fill.js": Object { + "size": "", + }, + "filter.js": Object { + "size": "", + }, + "find-index.js": Object { + "size": "", + }, + "find.js": Object { + "size": "", + }, + "for-each.js": Object { + "size": "", + }, + "from.js": Object { + "size": "", + }, + "includes.js": Object { + "size": "", + }, + "index-of.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + "join.js": Object { + "size": "", + }, + "keys.js": Object { + "size": "", + }, + "last-index-of.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "of.js": Object { + "size": "", + }, + "pop.js": Object { + "size": "", + }, + "push.js": Object { + "size": "", + }, + "reduce-right.js": Object { + "size": "", + }, + "reduce.js": Object { + "size": "", + }, + "reverse.js": Object { + "size": "", + }, + "shift.js": Object { + "size": "", + }, + "slice.js": Object { + "size": "", + }, + "some.js": Object { + "size": "", + }, + "sort.js": Object { + "size": "", + }, + "splice.js": Object { + "size": "", + }, + "unshift.js": Object { + "size": "", + }, + "values.js": Object { + "size": "", + }, + }, + }, + "clear-immediate.js": Object { + "size": "", + }, + "delay.js": Object { + "size": "", + }, + "dict.js": Object { + "size": "", + }, + "function": Object { + "files": Object { + "has-instance.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "name.js": Object { + "size": "", + }, + "part.js": Object { + "size": "", + }, + }, + }, + "get-iterator-method.js": Object { + "size": "", + }, + "get-iterator.js": Object { + "size": "", + }, + "html-collection": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + }, + }, + "is-iterable.js": Object { + "size": "", + }, + "json": Object { + "files": Object { + "stringify.js": Object { + "size": "", + }, + }, + }, + "log.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "math": Object { + "files": Object { + "acosh.js": Object { + "size": "", + }, + "asinh.js": Object { + "size": "", + }, + "atanh.js": Object { + "size": "", + }, + "cbrt.js": Object { + "size": "", + }, + "clz32.js": Object { + "size": "", + }, + "cosh.js": Object { + "size": "", + }, + "expm1.js": Object { + "size": "", + }, + "fround.js": Object { + "size": "", + }, + "hypot.js": Object { + "size": "", + }, + "imul.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "log10.js": Object { + "size": "", + }, + "log1p.js": Object { + "size": "", + }, + "log2.js": Object { + "size": "", + }, + "sign.js": Object { + "size": "", + }, + "sinh.js": Object { + "size": "", + }, + "tanh.js": Object { + "size": "", + }, + "trunc.js": Object { + "size": "", + }, + }, + }, + "node-list": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + }, + }, + "number": Object { + "files": Object { + "epsilon.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "is-finite.js": Object { + "size": "", + }, + "is-integer.js": Object { + "size": "", + }, + "is-nan.js": Object { + "size": "", + }, + "is-safe-integer.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + "max-safe-integer.js": Object { + "size": "", + }, + "min-safe-integer.js": Object { + "size": "", + }, + "parse-float.js": Object { + "size": "", + }, + "parse-int.js": Object { + "size": "", + }, + }, + }, + "object": Object { + "files": Object { + "assign.js": Object { + "size": "", + }, + "classof.js": Object { + "size": "", + }, + "create.js": Object { + "size": "", + }, + "define-properties.js": Object { + "size": "", + }, + "define-property.js": Object { + "size": "", + }, + "define.js": Object { + "size": "", + }, + "entries.js": Object { + "size": "", + }, + "freeze.js": Object { + "size": "", + }, + "get-own-property-descriptor.js": Object { + "size": "", + }, + "get-own-property-descriptors.js": Object { + "size": "", + }, + "get-own-property-names.js": Object { + "size": "", + }, + "get-own-property-symbols.js": Object { + "size": "", + }, + "get-prototype-of.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "is-extensible.js": Object { + "size": "", + }, + "is-frozen.js": Object { + "size": "", + }, + "is-object.js": Object { + "size": "", + }, + "is-sealed.js": Object { + "size": "", + }, + "is.js": Object { + "size": "", + }, + "keys.js": Object { + "size": "", + }, + "make.js": Object { + "size": "", + }, + "prevent-extensions.js": Object { + "size": "", + }, + "seal.js": Object { + "size": "", + }, + "set-prototype-of.js": Object { + "size": "", + }, + "values.js": Object { + "size": "", + }, + }, + }, + "promise.js": Object { + "size": "", + }, + "reflect": Object { + "files": Object { + "apply.js": Object { + "size": "", + }, + "construct.js": Object { + "size": "", + }, + "define-property.js": Object { + "size": "", + }, + "delete-property.js": Object { + "size": "", + }, + "enumerate.js": Object { + "size": "", + }, + "get-own-property-descriptor.js": Object { + "size": "", + }, + "get-prototype-of.js": Object { + "size": "", + }, + "get.js": Object { + "size": "", + }, + "has.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "is-extensible.js": Object { + "size": "", + }, + "own-keys.js": Object { + "size": "", + }, + "prevent-extensions.js": Object { + "size": "", + }, + "set-prototype-of.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + }, + }, + "regexp": Object { + "files": Object { + "escape.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + }, + }, + "set-immediate.js": Object { + "size": "", + }, + "set-interval.js": Object { + "size": "", + }, + "set-timeout.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + "string": Object { + "files": Object { + "at.js": Object { + "size": "", + }, + "code-point-at.js": Object { + "size": "", + }, + "ends-with.js": Object { + "size": "", + }, + "escape-html.js": Object { + "size": "", + }, + "from-code-point.js": Object { + "size": "", + }, + "includes.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + "pad-left.js": Object { + "size": "", + }, + "pad-right.js": Object { + "size": "", + }, + "raw.js": Object { + "size": "", + }, + "repeat.js": Object { + "size": "", + }, + "starts-with.js": Object { + "size": "", + }, + "trim-left.js": Object { + "size": "", + }, + "trim-right.js": Object { + "size": "", + }, + "trim.js": Object { + "size": "", + }, + "unescape-html.js": Object { + "size": "", + }, + }, + }, + "symbol": Object { + "files": Object { + "for.js": Object { + "size": "", + }, + "has-instance.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "is-concat-spreadable.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + "key-for.js": Object { + "size": "", + }, + "match.js": Object { + "size": "", + }, + "replace.js": Object { + "size": "", + }, + "search.js": Object { + "size": "", + }, + "species.js": Object { + "size": "", + }, + "split.js": Object { + "size": "", + }, + "to-primitive.js": Object { + "size": "", + }, + "to-string-tag.js": Object { + "size": "", + }, + "unscopables.js": Object { + "size": "", + }, + }, + }, + "weak-map.js": Object { + "size": "", + }, + "weak-set.js": Object { + "size": "", + }, + }, + }, + "index.js": Object { + "size": "", + }, + "js": Object { + "files": Object { + "array.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + }, + }, + "library": Object { + "files": Object { + "core": Object { + "files": Object { + "_.js": Object { + "size": "", + }, + "delay.js": Object { + "size": "", + }, + "dict.js": Object { + "size": "", + }, + "function.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "log.js": Object { + "size": "", + }, + "number.js": Object { + "size": "", + }, + "object.js": Object { + "size": "", + }, + "string.js": Object { + "size": "", + }, + }, + }, + "es5": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + }, + }, + "es6": Object { + "files": Object { + "array.js": Object { + "size": "", + }, + "function.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "math.js": Object { + "size": "", + }, + "number.js": Object { + "size": "", + }, + "object.js": Object { + "size": "", + }, + "promise.js": Object { + "size": "", + }, + "reflect.js": Object { + "size": "", + }, + "regexp.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + "string.js": Object { + "size": "", + }, + "symbol.js": Object { + "size": "", + }, + "weak-map.js": Object { + "size": "", + }, + "weak-set.js": Object { + "size": "", + }, + }, + }, + "es7": Object { + "files": Object { + "array.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "object.js": Object { + "size": "", + }, + "regexp.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + "string.js": Object { + "size": "", + }, + }, + }, + "fn": Object { + "files": Object { + "_.js": Object { + "size": "", + }, + "array": Object { + "files": Object { + "concat.js": Object { + "size": "", + }, + "copy-within.js": Object { + "size": "", + }, + "entries.js": Object { + "size": "", + }, + "every.js": Object { + "size": "", + }, + "fill.js": Object { + "size": "", + }, + "filter.js": Object { + "size": "", + }, + "find-index.js": Object { + "size": "", + }, + "find.js": Object { + "size": "", + }, + "for-each.js": Object { + "size": "", + }, + "from.js": Object { + "size": "", + }, + "includes.js": Object { + "size": "", + }, + "index-of.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + "join.js": Object { + "size": "", + }, + "keys.js": Object { + "size": "", + }, + "last-index-of.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "of.js": Object { + "size": "", + }, + "pop.js": Object { + "size": "", + }, + "push.js": Object { + "size": "", + }, + "reduce-right.js": Object { + "size": "", + }, + "reduce.js": Object { + "size": "", + }, + "reverse.js": Object { + "size": "", + }, + "shift.js": Object { + "size": "", + }, + "slice.js": Object { + "size": "", + }, + "some.js": Object { + "size": "", + }, + "sort.js": Object { + "size": "", + }, + "splice.js": Object { + "size": "", + }, + "unshift.js": Object { + "size": "", + }, + "values.js": Object { + "size": "", + }, + }, + }, + "clear-immediate.js": Object { + "size": "", + }, + "delay.js": Object { + "size": "", + }, + "dict.js": Object { + "size": "", + }, + "function": Object { + "files": Object { + "has-instance.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "name.js": Object { + "size": "", + }, + "part.js": Object { + "size": "", + }, + }, + }, + "get-iterator-method.js": Object { + "size": "", + }, + "get-iterator.js": Object { + "size": "", + }, + "html-collection": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + }, + }, + "is-iterable.js": Object { + "size": "", + }, + "json": Object { + "files": Object { + "stringify.js": Object { + "size": "", + }, + }, + }, + "log.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "math": Object { + "files": Object { + "acosh.js": Object { + "size": "", + }, + "asinh.js": Object { + "size": "", + }, + "atanh.js": Object { + "size": "", + }, + "cbrt.js": Object { + "size": "", + }, + "clz32.js": Object { + "size": "", + }, + "cosh.js": Object { + "size": "", + }, + "expm1.js": Object { + "size": "", + }, + "fround.js": Object { + "size": "", + }, + "hypot.js": Object { + "size": "", + }, + "imul.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "log10.js": Object { + "size": "", + }, + "log1p.js": Object { + "size": "", + }, + "log2.js": Object { + "size": "", + }, + "sign.js": Object { + "size": "", + }, + "sinh.js": Object { + "size": "", + }, + "tanh.js": Object { + "size": "", + }, + "trunc.js": Object { + "size": "", + }, + }, + }, + "node-list": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + }, + }, + "number": Object { + "files": Object { + "epsilon.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "is-finite.js": Object { + "size": "", + }, + "is-integer.js": Object { + "size": "", + }, + "is-nan.js": Object { + "size": "", + }, + "is-safe-integer.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + "max-safe-integer.js": Object { + "size": "", + }, + "min-safe-integer.js": Object { + "size": "", + }, + "parse-float.js": Object { + "size": "", + }, + "parse-int.js": Object { + "size": "", + }, + }, + }, + "object": Object { + "files": Object { + "assign.js": Object { + "size": "", + }, + "classof.js": Object { + "size": "", + }, + "create.js": Object { + "size": "", + }, + "define-properties.js": Object { + "size": "", + }, + "define-property.js": Object { + "size": "", + }, + "define.js": Object { + "size": "", + }, + "entries.js": Object { + "size": "", + }, + "freeze.js": Object { + "size": "", + }, + "get-own-property-descriptor.js": Object { + "size": "", + }, + "get-own-property-descriptors.js": Object { + "size": "", + }, + "get-own-property-names.js": Object { + "size": "", + }, + "get-own-property-symbols.js": Object { + "size": "", + }, + "get-prototype-of.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "is-extensible.js": Object { + "size": "", + }, + "is-frozen.js": Object { + "size": "", + }, + "is-object.js": Object { + "size": "", + }, + "is-sealed.js": Object { + "size": "", + }, + "is.js": Object { + "size": "", + }, + "keys.js": Object { + "size": "", + }, + "make.js": Object { + "size": "", + }, + "prevent-extensions.js": Object { + "size": "", + }, + "seal.js": Object { + "size": "", + }, + "set-prototype-of.js": Object { + "size": "", + }, + "values.js": Object { + "size": "", + }, + }, + }, + "promise.js": Object { + "size": "", + }, + "reflect": Object { + "files": Object { + "apply.js": Object { + "size": "", + }, + "construct.js": Object { + "size": "", + }, + "define-property.js": Object { + "size": "", + }, + "delete-property.js": Object { + "size": "", + }, + "enumerate.js": Object { + "size": "", + }, + "get-own-property-descriptor.js": Object { + "size": "", + }, + "get-prototype-of.js": Object { + "size": "", + }, + "get.js": Object { + "size": "", + }, + "has.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "is-extensible.js": Object { + "size": "", + }, + "own-keys.js": Object { + "size": "", + }, + "prevent-extensions.js": Object { + "size": "", + }, + "set-prototype-of.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + }, + }, + "regexp": Object { + "files": Object { + "escape.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + }, + }, + "set-immediate.js": Object { + "size": "", + }, + "set-interval.js": Object { + "size": "", + }, + "set-timeout.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + "string": Object { + "files": Object { + "at.js": Object { + "size": "", + }, + "code-point-at.js": Object { + "size": "", + }, + "ends-with.js": Object { + "size": "", + }, + "escape-html.js": Object { + "size": "", + }, + "from-code-point.js": Object { + "size": "", + }, + "includes.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + "pad-left.js": Object { + "size": "", + }, + "pad-right.js": Object { + "size": "", + }, + "raw.js": Object { + "size": "", + }, + "repeat.js": Object { + "size": "", + }, + "starts-with.js": Object { + "size": "", + }, + "trim-left.js": Object { + "size": "", + }, + "trim-right.js": Object { + "size": "", + }, + "trim.js": Object { + "size": "", + }, + "unescape-html.js": Object { + "size": "", + }, + }, + }, + "symbol": Object { + "files": Object { + "for.js": Object { + "size": "", + }, + "has-instance.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "is-concat-spreadable.js": Object { + "size": "", + }, + "iterator.js": Object { + "size": "", + }, + "key-for.js": Object { + "size": "", + }, + "match.js": Object { + "size": "", + }, + "replace.js": Object { + "size": "", + }, + "search.js": Object { + "size": "", + }, + "species.js": Object { + "size": "", + }, + "split.js": Object { + "size": "", + }, + "to-primitive.js": Object { + "size": "", + }, + "to-string-tag.js": Object { + "size": "", + }, + "unscopables.js": Object { + "size": "", + }, + }, + }, + "weak-map.js": Object { + "size": "", + }, + "weak-set.js": Object { + "size": "", + }, + }, + }, + "index.js": Object { + "size": "", + }, + "js": Object { + "files": Object { + "array.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + }, + }, + "modules": Object { + "files": Object { + "$.a-function.js": Object { + "size": "", + }, + "$.add-to-unscopables.js": Object { + "size": "", + }, + "$.an-object.js": Object { + "size": "", + }, + "$.array-copy-within.js": Object { + "size": "", + }, + "$.array-fill.js": Object { + "size": "", + }, + "$.array-includes.js": Object { + "size": "", + }, + "$.array-methods.js": Object { + "size": "", + }, + "$.array-species-create.js": Object { + "size": "", + }, + "$.buffer.js": Object { + "size": "", + }, + "$.classof.js": Object { + "size": "", + }, + "$.cof.js": Object { + "size": "", + }, + "$.collection-strong.js": Object { + "size": "", + }, + "$.collection-to-json.js": Object { + "size": "", + }, + "$.collection-weak.js": Object { + "size": "", + }, + "$.collection.js": Object { + "size": "", + }, + "$.core.js": Object { + "size": "", + }, + "$.ctx.js": Object { + "size": "", + }, + "$.defined.js": Object { + "size": "", + }, + "$.descriptors.js": Object { + "size": "", + }, + "$.dom-create.js": Object { + "size": "", + }, + "$.enum-keys.js": Object { + "size": "", + }, + "$.export.js": Object { + "size": "", + }, + "$.fails-is-regexp.js": Object { + "size": "", + }, + "$.fails.js": Object { + "size": "", + }, + "$.fix-re-wks.js": Object { + "size": "", + }, + "$.flags.js": Object { + "size": "", + }, + "$.for-of.js": Object { + "size": "", + }, + "$.get-names.js": Object { + "size": "", + }, + "$.global.js": Object { + "size": "", + }, + "$.has.js": Object { + "size": "", + }, + "$.hide.js": Object { + "size": "", + }, + "$.html.js": Object { + "size": "", + }, + "$.invoke.js": Object { + "size": "", + }, + "$.iobject.js": Object { + "size": "", + }, + "$.is-array-iter.js": Object { + "size": "", + }, + "$.is-array.js": Object { + "size": "", + }, + "$.is-integer.js": Object { + "size": "", + }, + "$.is-object.js": Object { + "size": "", + }, + "$.is-regexp.js": Object { + "size": "", + }, + "$.iter-call.js": Object { + "size": "", + }, + "$.iter-create.js": Object { + "size": "", + }, + "$.iter-define.js": Object { + "size": "", + }, + "$.iter-detect.js": Object { + "size": "", + }, + "$.iter-step.js": Object { + "size": "", + }, + "$.iterators.js": Object { + "size": "", + }, + "$.js": Object { + "size": "", + }, + "$.keyof.js": Object { + "size": "", + }, + "$.library.js": Object { + "size": "", + }, + "$.math-expm1.js": Object { + "size": "", + }, + "$.math-log1p.js": Object { + "size": "", + }, + "$.math-sign.js": Object { + "size": "", + }, + "$.microtask.js": Object { + "size": "", + }, + "$.object-assign.js": Object { + "size": "", + }, + "$.object-define.js": Object { + "size": "", + }, + "$.object-sap.js": Object { + "size": "", + }, + "$.object-to-array.js": Object { + "size": "", + }, + "$.own-keys.js": Object { + "size": "", + }, + "$.partial.js": Object { + "size": "", + }, + "$.path.js": Object { + "size": "", + }, + "$.property-desc.js": Object { + "size": "", + }, + "$.redefine-all.js": Object { + "size": "", + }, + "$.redefine.js": Object { + "size": "", + }, + "$.replacer.js": Object { + "size": "", + }, + "$.same-value.js": Object { + "size": "", + }, + "$.set-proto.js": Object { + "size": "", + }, + "$.set-species.js": Object { + "size": "", + }, + "$.set-to-string-tag.js": Object { + "size": "", + }, + "$.shared.js": Object { + "size": "", + }, + "$.species-constructor.js": Object { + "size": "", + }, + "$.strict-new.js": Object { + "size": "", + }, + "$.string-at.js": Object { + "size": "", + }, + "$.string-context.js": Object { + "size": "", + }, + "$.string-pad.js": Object { + "size": "", + }, + "$.string-repeat.js": Object { + "size": "", + }, + "$.string-trim.js": Object { + "size": "", + }, + "$.task.js": Object { + "size": "", + }, + "$.to-index.js": Object { + "size": "", + }, + "$.to-integer.js": Object { + "size": "", + }, + "$.to-iobject.js": Object { + "size": "", + }, + "$.to-length.js": Object { + "size": "", + }, + "$.to-object.js": Object { + "size": "", + }, + "$.to-primitive.js": Object { + "size": "", + }, + "$.typed-array.js": Object { + "size": "", + }, + "$.typed.js": Object { + "size": "", + }, + "$.uid.js": Object { + "size": "", + }, + "$.wks.js": Object { + "size": "", + }, + "core.delay.js": Object { + "size": "", + }, + "core.dict.js": Object { + "size": "", + }, + "core.function.part.js": Object { + "size": "", + }, + "core.get-iterator-method.js": Object { + "size": "", + }, + "core.get-iterator.js": Object { + "size": "", + }, + "core.is-iterable.js": Object { + "size": "", + }, + "core.log.js": Object { + "size": "", + }, + "core.number.iterator.js": Object { + "size": "", + }, + "core.object.classof.js": Object { + "size": "", + }, + "core.object.define.js": Object { + "size": "", + }, + "core.object.is-object.js": Object { + "size": "", + }, + "core.object.make.js": Object { + "size": "", + }, + "core.string.escape-html.js": Object { + "size": "", + }, + "core.string.unescape-html.js": Object { + "size": "", + }, + "es5.js": Object { + "size": "", + }, + "es6.array.copy-within.js": Object { + "size": "", + }, + "es6.array.fill.js": Object { + "size": "", + }, + "es6.array.find-index.js": Object { + "size": "", + }, + "es6.array.find.js": Object { + "size": "", + }, + "es6.array.from.js": Object { + "size": "", + }, + "es6.array.iterator.js": Object { + "size": "", + }, + "es6.array.of.js": Object { + "size": "", + }, + "es6.array.species.js": Object { + "size": "", + }, + "es6.date.to-string.js": Object { + "size": "", + }, + "es6.function.has-instance.js": Object { + "size": "", + }, + "es6.function.name.js": Object { + "size": "", + }, + "es6.map.js": Object { + "size": "", + }, + "es6.math.acosh.js": Object { + "size": "", + }, + "es6.math.asinh.js": Object { + "size": "", + }, + "es6.math.atanh.js": Object { + "size": "", + }, + "es6.math.cbrt.js": Object { + "size": "", + }, + "es6.math.clz32.js": Object { + "size": "", + }, + "es6.math.cosh.js": Object { + "size": "", + }, + "es6.math.expm1.js": Object { + "size": "", + }, + "es6.math.fround.js": Object { + "size": "", + }, + "es6.math.hypot.js": Object { + "size": "", + }, + "es6.math.imul.js": Object { + "size": "", + }, + "es6.math.log10.js": Object { + "size": "", + }, + "es6.math.log1p.js": Object { + "size": "", + }, + "es6.math.log2.js": Object { + "size": "", + }, + "es6.math.sign.js": Object { + "size": "", + }, + "es6.math.sinh.js": Object { + "size": "", + }, + "es6.math.tanh.js": Object { + "size": "", + }, + "es6.math.trunc.js": Object { + "size": "", + }, + "es6.number.constructor.js": Object { + "size": "", + }, + "es6.number.epsilon.js": Object { + "size": "", + }, + "es6.number.is-finite.js": Object { + "size": "", + }, + "es6.number.is-integer.js": Object { + "size": "", + }, + "es6.number.is-nan.js": Object { + "size": "", + }, + "es6.number.is-safe-integer.js": Object { + "size": "", + }, + "es6.number.max-safe-integer.js": Object { + "size": "", + }, + "es6.number.min-safe-integer.js": Object { + "size": "", + }, + "es6.number.parse-float.js": Object { + "size": "", + }, + "es6.number.parse-int.js": Object { + "size": "", + }, + "es6.object.assign.js": Object { + "size": "", + }, + "es6.object.freeze.js": Object { + "size": "", + }, + "es6.object.get-own-property-descriptor.js": Object { + "size": "", + }, + "es6.object.get-own-property-names.js": Object { + "size": "", + }, + "es6.object.get-prototype-of.js": Object { + "size": "", + }, + "es6.object.is-extensible.js": Object { + "size": "", + }, + "es6.object.is-frozen.js": Object { + "size": "", + }, + "es6.object.is-sealed.js": Object { + "size": "", + }, + "es6.object.is.js": Object { + "size": "", + }, + "es6.object.keys.js": Object { + "size": "", + }, + "es6.object.prevent-extensions.js": Object { + "size": "", + }, + "es6.object.seal.js": Object { + "size": "", + }, + "es6.object.set-prototype-of.js": Object { + "size": "", + }, + "es6.object.to-string.js": Object { + "size": "", + }, + "es6.promise.js": Object { + "size": "", + }, + "es6.reflect.apply.js": Object { + "size": "", + }, + "es6.reflect.construct.js": Object { + "size": "", + }, + "es6.reflect.define-property.js": Object { + "size": "", + }, + "es6.reflect.delete-property.js": Object { + "size": "", + }, + "es6.reflect.enumerate.js": Object { + "size": "", + }, + "es6.reflect.get-own-property-descriptor.js": Object { + "size": "", + }, + "es6.reflect.get-prototype-of.js": Object { + "size": "", + }, + "es6.reflect.get.js": Object { + "size": "", + }, + "es6.reflect.has.js": Object { + "size": "", + }, + "es6.reflect.is-extensible.js": Object { + "size": "", + }, + "es6.reflect.own-keys.js": Object { + "size": "", + }, + "es6.reflect.prevent-extensions.js": Object { + "size": "", + }, + "es6.reflect.set-prototype-of.js": Object { + "size": "", + }, + "es6.reflect.set.js": Object { + "size": "", + }, + "es6.regexp.constructor.js": Object { + "size": "", + }, + "es6.regexp.flags.js": Object { + "size": "", + }, + "es6.regexp.match.js": Object { + "size": "", + }, + "es6.regexp.replace.js": Object { + "size": "", + }, + "es6.regexp.search.js": Object { + "size": "", + }, + "es6.regexp.split.js": Object { + "size": "", + }, + "es6.set.js": Object { + "size": "", + }, + "es6.string.code-point-at.js": Object { + "size": "", + }, + "es6.string.ends-with.js": Object { + "size": "", + }, + "es6.string.from-code-point.js": Object { + "size": "", + }, + "es6.string.includes.js": Object { + "size": "", + }, + "es6.string.iterator.js": Object { + "size": "", + }, + "es6.string.raw.js": Object { + "size": "", + }, + "es6.string.repeat.js": Object { + "size": "", + }, + "es6.string.starts-with.js": Object { + "size": "", + }, + "es6.string.trim.js": Object { + "size": "", + }, + "es6.symbol.js": Object { + "size": "", + }, + "es6.typed.array-buffer.js": Object { + "size": "", + }, + "es6.typed.data-view.js": Object { + "size": "", + }, + "es6.typed.float32-array.js": Object { + "size": "", + }, + "es6.typed.float64-array.js": Object { + "size": "", + }, + "es6.typed.int16-array.js": Object { + "size": "", + }, + "es6.typed.int32-array.js": Object { + "size": "", + }, + "es6.typed.int8-array.js": Object { + "size": "", + }, + "es6.typed.uint16-array.js": Object { + "size": "", + }, + "es6.typed.uint32-array.js": Object { + "size": "", + }, + "es6.typed.uint8-array.js": Object { + "size": "", + }, + "es6.typed.uint8-clamped-array.js": Object { + "size": "", + }, + "es6.weak-map.js": Object { + "size": "", + }, + "es6.weak-set.js": Object { + "size": "", + }, + "es7.array.includes.js": Object { + "size": "", + }, + "es7.map.to-json.js": Object { + "size": "", + }, + "es7.object.entries.js": Object { + "size": "", + }, + "es7.object.get-own-property-descriptors.js": Object { + "size": "", + }, + "es7.object.values.js": Object { + "size": "", + }, + "es7.regexp.escape.js": Object { + "size": "", + }, + "es7.set.to-json.js": Object { + "size": "", + }, + "es7.string.at.js": Object { + "size": "", + }, + "es7.string.pad-left.js": Object { + "size": "", + }, + "es7.string.pad-right.js": Object { + "size": "", + }, + "es7.string.trim-left.js": Object { + "size": "", + }, + "es7.string.trim-right.js": Object { + "size": "", + }, + "js.array.statics.js": Object { + "size": "", + }, + "web.dom.iterable.js": Object { + "size": "", + }, + "web.immediate.js": Object { + "size": "", + }, + "web.timers.js": Object { + "size": "", + }, + }, + }, + "shim.js": Object { + "size": "", + }, + "web": Object { + "files": Object { + "dom.js": Object { + "size": "", + }, + "immediate.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "timers.js": Object { + "size": "", + }, + }, + }, + }, + }, + "modules": Object { + "files": Object { + "$.a-function.js": Object { + "size": "", + }, + "$.add-to-unscopables.js": Object { + "size": "", + }, + "$.an-object.js": Object { + "size": "", + }, + "$.array-copy-within.js": Object { + "size": "", + }, + "$.array-fill.js": Object { + "size": "", + }, + "$.array-includes.js": Object { + "size": "", + }, + "$.array-methods.js": Object { + "size": "", + }, + "$.array-species-create.js": Object { + "size": "", + }, + "$.buffer.js": Object { + "size": "", + }, + "$.classof.js": Object { + "size": "", + }, + "$.cof.js": Object { + "size": "", + }, + "$.collection-strong.js": Object { + "size": "", + }, + "$.collection-to-json.js": Object { + "size": "", + }, + "$.collection-weak.js": Object { + "size": "", + }, + "$.collection.js": Object { + "size": "", + }, + "$.core.js": Object { + "size": "", + }, + "$.ctx.js": Object { + "size": "", + }, + "$.defined.js": Object { + "size": "", + }, + "$.descriptors.js": Object { + "size": "", + }, + "$.dom-create.js": Object { + "size": "", + }, + "$.enum-keys.js": Object { + "size": "", + }, + "$.export.js": Object { + "size": "", + }, + "$.fails-is-regexp.js": Object { + "size": "", + }, + "$.fails.js": Object { + "size": "", + }, + "$.fix-re-wks.js": Object { + "size": "", + }, + "$.flags.js": Object { + "size": "", + }, + "$.for-of.js": Object { + "size": "", + }, + "$.get-names.js": Object { + "size": "", + }, + "$.global.js": Object { + "size": "", + }, + "$.has.js": Object { + "size": "", + }, + "$.hide.js": Object { + "size": "", + }, + "$.html.js": Object { + "size": "", + }, + "$.invoke.js": Object { + "size": "", + }, + "$.iobject.js": Object { + "size": "", + }, + "$.is-array-iter.js": Object { + "size": "", + }, + "$.is-array.js": Object { + "size": "", + }, + "$.is-integer.js": Object { + "size": "", + }, + "$.is-object.js": Object { + "size": "", + }, + "$.is-regexp.js": Object { + "size": "", + }, + "$.iter-call.js": Object { + "size": "", + }, + "$.iter-create.js": Object { + "size": "", + }, + "$.iter-define.js": Object { + "size": "", + }, + "$.iter-detect.js": Object { + "size": "", + }, + "$.iter-step.js": Object { + "size": "", + }, + "$.iterators.js": Object { + "size": "", + }, + "$.js": Object { + "size": "", + }, + "$.keyof.js": Object { + "size": "", + }, + "$.library.js": Object { + "size": "", + }, + "$.math-expm1.js": Object { + "size": "", + }, + "$.math-log1p.js": Object { + "size": "", + }, + "$.math-sign.js": Object { + "size": "", + }, + "$.microtask.js": Object { + "size": "", + }, + "$.object-assign.js": Object { + "size": "", + }, + "$.object-define.js": Object { + "size": "", + }, + "$.object-sap.js": Object { + "size": "", + }, + "$.object-to-array.js": Object { + "size": "", + }, + "$.own-keys.js": Object { + "size": "", + }, + "$.partial.js": Object { + "size": "", + }, + "$.path.js": Object { + "size": "", + }, + "$.property-desc.js": Object { + "size": "", + }, + "$.redefine-all.js": Object { + "size": "", + }, + "$.redefine.js": Object { + "size": "", + }, + "$.replacer.js": Object { + "size": "", + }, + "$.same-value.js": Object { + "size": "", + }, + "$.set-proto.js": Object { + "size": "", + }, + "$.set-species.js": Object { + "size": "", + }, + "$.set-to-string-tag.js": Object { + "size": "", + }, + "$.shared.js": Object { + "size": "", + }, + "$.species-constructor.js": Object { + "size": "", + }, + "$.strict-new.js": Object { + "size": "", + }, + "$.string-at.js": Object { + "size": "", + }, + "$.string-context.js": Object { + "size": "", + }, + "$.string-pad.js": Object { + "size": "", + }, + "$.string-repeat.js": Object { + "size": "", + }, + "$.string-trim.js": Object { + "size": "", + }, + "$.task.js": Object { + "size": "", + }, + "$.to-index.js": Object { + "size": "", + }, + "$.to-integer.js": Object { + "size": "", + }, + "$.to-iobject.js": Object { + "size": "", + }, + "$.to-length.js": Object { + "size": "", + }, + "$.to-object.js": Object { + "size": "", + }, + "$.to-primitive.js": Object { + "size": "", + }, + "$.typed-array.js": Object { + "size": "", + }, + "$.typed.js": Object { + "size": "", + }, + "$.uid.js": Object { + "size": "", + }, + "$.wks.js": Object { + "size": "", + }, + "core.delay.js": Object { + "size": "", + }, + "core.dict.js": Object { + "size": "", + }, + "core.function.part.js": Object { + "size": "", + }, + "core.get-iterator-method.js": Object { + "size": "", + }, + "core.get-iterator.js": Object { + "size": "", + }, + "core.is-iterable.js": Object { + "size": "", + }, + "core.log.js": Object { + "size": "", + }, + "core.number.iterator.js": Object { + "size": "", + }, + "core.object.classof.js": Object { + "size": "", + }, + "core.object.define.js": Object { + "size": "", + }, + "core.object.is-object.js": Object { + "size": "", + }, + "core.object.make.js": Object { + "size": "", + }, + "core.string.escape-html.js": Object { + "size": "", + }, + "core.string.unescape-html.js": Object { + "size": "", + }, + "es5.js": Object { + "size": "", + }, + "es6.array.copy-within.js": Object { + "size": "", + }, + "es6.array.fill.js": Object { + "size": "", + }, + "es6.array.find-index.js": Object { + "size": "", + }, + "es6.array.find.js": Object { + "size": "", + }, + "es6.array.from.js": Object { + "size": "", + }, + "es6.array.iterator.js": Object { + "size": "", + }, + "es6.array.of.js": Object { + "size": "", + }, + "es6.array.species.js": Object { + "size": "", + }, + "es6.date.to-string.js": Object { + "size": "", + }, + "es6.function.has-instance.js": Object { + "size": "", + }, + "es6.function.name.js": Object { + "size": "", + }, + "es6.map.js": Object { + "size": "", + }, + "es6.math.acosh.js": Object { + "size": "", + }, + "es6.math.asinh.js": Object { + "size": "", + }, + "es6.math.atanh.js": Object { + "size": "", + }, + "es6.math.cbrt.js": Object { + "size": "", + }, + "es6.math.clz32.js": Object { + "size": "", + }, + "es6.math.cosh.js": Object { + "size": "", + }, + "es6.math.expm1.js": Object { + "size": "", + }, + "es6.math.fround.js": Object { + "size": "", + }, + "es6.math.hypot.js": Object { + "size": "", + }, + "es6.math.imul.js": Object { + "size": "", + }, + "es6.math.log10.js": Object { + "size": "", + }, + "es6.math.log1p.js": Object { + "size": "", + }, + "es6.math.log2.js": Object { + "size": "", + }, + "es6.math.sign.js": Object { + "size": "", + }, + "es6.math.sinh.js": Object { + "size": "", + }, + "es6.math.tanh.js": Object { + "size": "", + }, + "es6.math.trunc.js": Object { + "size": "", + }, + "es6.number.constructor.js": Object { + "size": "", + }, + "es6.number.epsilon.js": Object { + "size": "", + }, + "es6.number.is-finite.js": Object { + "size": "", + }, + "es6.number.is-integer.js": Object { + "size": "", + }, + "es6.number.is-nan.js": Object { + "size": "", + }, + "es6.number.is-safe-integer.js": Object { + "size": "", + }, + "es6.number.max-safe-integer.js": Object { + "size": "", + }, + "es6.number.min-safe-integer.js": Object { + "size": "", + }, + "es6.number.parse-float.js": Object { + "size": "", + }, + "es6.number.parse-int.js": Object { + "size": "", + }, + "es6.object.assign.js": Object { + "size": "", + }, + "es6.object.freeze.js": Object { + "size": "", + }, + "es6.object.get-own-property-descriptor.js": Object { + "size": "", + }, + "es6.object.get-own-property-names.js": Object { + "size": "", + }, + "es6.object.get-prototype-of.js": Object { + "size": "", + }, + "es6.object.is-extensible.js": Object { + "size": "", + }, + "es6.object.is-frozen.js": Object { + "size": "", + }, + "es6.object.is-sealed.js": Object { + "size": "", + }, + "es6.object.is.js": Object { + "size": "", + }, + "es6.object.keys.js": Object { + "size": "", + }, + "es6.object.prevent-extensions.js": Object { + "size": "", + }, + "es6.object.seal.js": Object { + "size": "", + }, + "es6.object.set-prototype-of.js": Object { + "size": "", + }, + "es6.object.to-string.js": Object { + "size": "", + }, + "es6.promise.js": Object { + "size": "", + }, + "es6.reflect.apply.js": Object { + "size": "", + }, + "es6.reflect.construct.js": Object { + "size": "", + }, + "es6.reflect.define-property.js": Object { + "size": "", + }, + "es6.reflect.delete-property.js": Object { + "size": "", + }, + "es6.reflect.enumerate.js": Object { + "size": "", + }, + "es6.reflect.get-own-property-descriptor.js": Object { + "size": "", + }, + "es6.reflect.get-prototype-of.js": Object { + "size": "", + }, + "es6.reflect.get.js": Object { + "size": "", + }, + "es6.reflect.has.js": Object { + "size": "", + }, + "es6.reflect.is-extensible.js": Object { + "size": "", + }, + "es6.reflect.own-keys.js": Object { + "size": "", + }, + "es6.reflect.prevent-extensions.js": Object { + "size": "", + }, + "es6.reflect.set-prototype-of.js": Object { + "size": "", + }, + "es6.reflect.set.js": Object { + "size": "", + }, + "es6.regexp.constructor.js": Object { + "size": "", + }, + "es6.regexp.flags.js": Object { + "size": "", + }, + "es6.regexp.match.js": Object { + "size": "", + }, + "es6.regexp.replace.js": Object { + "size": "", + }, + "es6.regexp.search.js": Object { + "size": "", + }, + "es6.regexp.split.js": Object { + "size": "", + }, + "es6.set.js": Object { + "size": "", + }, + "es6.string.code-point-at.js": Object { + "size": "", + }, + "es6.string.ends-with.js": Object { + "size": "", + }, + "es6.string.from-code-point.js": Object { + "size": "", + }, + "es6.string.includes.js": Object { + "size": "", + }, + "es6.string.iterator.js": Object { + "size": "", + }, + "es6.string.raw.js": Object { + "size": "", + }, + "es6.string.repeat.js": Object { + "size": "", + }, + "es6.string.starts-with.js": Object { + "size": "", + }, + "es6.string.trim.js": Object { + "size": "", + }, + "es6.symbol.js": Object { + "size": "", + }, + "es6.typed.array-buffer.js": Object { + "size": "", + }, + "es6.typed.data-view.js": Object { + "size": "", + }, + "es6.typed.float32-array.js": Object { + "size": "", + }, + "es6.typed.float64-array.js": Object { + "size": "", + }, + "es6.typed.int16-array.js": Object { + "size": "", + }, + "es6.typed.int32-array.js": Object { + "size": "", + }, + "es6.typed.int8-array.js": Object { + "size": "", + }, + "es6.typed.uint16-array.js": Object { + "size": "", + }, + "es6.typed.uint32-array.js": Object { + "size": "", + }, + "es6.typed.uint8-array.js": Object { + "size": "", + }, + "es6.typed.uint8-clamped-array.js": Object { + "size": "", + }, + "es6.weak-map.js": Object { + "size": "", + }, + "es6.weak-set.js": Object { + "size": "", + }, + "es7.array.includes.js": Object { + "size": "", + }, + "es7.map.to-json.js": Object { + "size": "", + }, + "es7.object.entries.js": Object { + "size": "", + }, + "es7.object.get-own-property-descriptors.js": Object { + "size": "", + }, + "es7.object.values.js": Object { + "size": "", + }, + "es7.regexp.escape.js": Object { + "size": "", + }, + "es7.set.to-json.js": Object { + "size": "", + }, + "es7.string.at.js": Object { + "size": "", + }, + "es7.string.pad-left.js": Object { + "size": "", + }, + "es7.string.pad-right.js": Object { + "size": "", + }, + "es7.string.trim-left.js": Object { + "size": "", + }, + "es7.string.trim-right.js": Object { + "size": "", + }, + "js.array.statics.js": Object { + "size": "", + }, + "library": Object { + "files": Object { + "$.add-to-unscopables.js": Object { + "size": "", + }, + "$.collection.js": Object { + "size": "", + }, + "$.export.js": Object { + "size": "", + }, + "$.library.js": Object { + "size": "", + }, + "$.path.js": Object { + "size": "", + }, + "$.redefine.js": Object { + "size": "", + }, + "$.set-species.js": Object { + "size": "", + }, + "es6.date.to-string.js": Object { + "size": "", + }, + "es6.function.name.js": Object { + "size": "", + }, + "es6.number.constructor.js": Object { + "size": "", + }, + "es6.object.to-string.js": Object { + "size": "", + }, + "es6.regexp.constructor.js": Object { + "size": "", + }, + "es6.regexp.flags.js": Object { + "size": "", + }, + "es6.regexp.match.js": Object { + "size": "", + }, + "es6.regexp.replace.js": Object { + "size": "", + }, + "es6.regexp.search.js": Object { + "size": "", + }, + "es6.regexp.split.js": Object { + "size": "", + }, + "web.dom.iterable.js": Object { + "size": "", + }, + }, + }, + "web.dom.iterable.js": Object { + "size": "", + }, + "web.immediate.js": Object { + "size": "", + }, + "web.timers.js": Object { + "size": "", + }, + }, + }, + "package.json": Object { + "size": "", + }, + "shim.js": Object { + "size": "", + }, + "web": Object { + "files": Object { + "dom.js": Object { + "size": "", + }, + "immediate.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "timers.js": Object { + "size": "", + }, + }, + }, + }, + }, + "debug": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "dist": Object { + "files": Object { + "debug.js": Object { + "size": "", + }, + }, + }, + "package.json": Object { + "size": "", + }, + "src": Object { + "files": Object { + "browser.js": Object { + "size": "", + }, + "common.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "node.js": Object { + "size": "", + }, + }, + }, + }, + }, + "encoding": Object { + "files": Object { + ".prettierrc.js": Object { + "size": "", + }, + "LICENSE": Object { + "size": "", + }, + "lib": Object { + "files": Object { + "encoding.js": Object { + "size": "", + }, + }, + }, + "package.json": Object { + "size": "", + }, + }, + }, + "fbjs": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "flow": Object { + "files": Object { + "lib": Object { + "files": Object { + "dev.js": Object { + "size": "", + }, + }, + }, + }, + }, + "index.js": Object { + "size": "", + }, + "lib": Object { + "files": Object { + "CSSCore.js": Object { + "size": "", + }, + "CSSCore.js.flow": Object { + "size": "", + }, + "DataTransfer.js": Object { + "size": "", + }, + "DataTransfer.js.flow": Object { + "size": "", + }, + "Deferred.js": Object { + "size": "", + }, + "Deferred.js.flow": Object { + "size": "", + }, + "ErrorUtils.js": Object { + "size": "", + }, + "ErrorUtils.js.flow": Object { + "size": "", + }, + "EventListener.js": Object { + "size": "", + }, + "EventListener.js.flow": Object { + "size": "", + }, + "ExecutionEnvironment.js": Object { + "size": "", + }, + "ExecutionEnvironment.js.flow": Object { + "size": "", + }, + "Keys.js": Object { + "size": "", + }, + "Keys.js.flow": Object { + "size": "", + }, + "Map.js": Object { + "size": "", + }, + "Map.js.flow": Object { + "size": "", + }, + "PhotosMimeType.js": Object { + "size": "", + }, + "PhotosMimeType.js.flow": Object { + "size": "", + }, + "Promise.js": Object { + "size": "", + }, + "Promise.js.flow": Object { + "size": "", + }, + "Promise.native.js": Object { + "size": "", + }, + "Promise.native.js.flow": Object { + "size": "", + }, + "PromiseMap.js": Object { + "size": "", + }, + "PromiseMap.js.flow": Object { + "size": "", + }, + "Scroll.js": Object { + "size": "", + }, + "Scroll.js.flow": Object { + "size": "", + }, + "Set.js": Object { + "size": "", + }, + "Set.js.flow": Object { + "size": "", + }, + "Style.js": Object { + "size": "", + }, + "Style.js.flow": Object { + "size": "", + }, + "TokenizeUtil.js": Object { + "size": "", + }, + "TokenizeUtil.js.flow": Object { + "size": "", + }, + "TouchEventUtils.js": Object { + "size": "", + }, + "TouchEventUtils.js.flow": Object { + "size": "", + }, + "URI.js": Object { + "size": "", + }, + "URI.js.flow": Object { + "size": "", + }, + "UnicodeBidi.js": Object { + "size": "", + }, + "UnicodeBidi.js.flow": Object { + "size": "", + }, + "UnicodeBidiDirection.js": Object { + "size": "", + }, + "UnicodeBidiDirection.js.flow": Object { + "size": "", + }, + "UnicodeBidiService.js": Object { + "size": "", + }, + "UnicodeBidiService.js.flow": Object { + "size": "", + }, + "UnicodeCJK.js": Object { + "size": "", + }, + "UnicodeCJK.js.flow": Object { + "size": "", + }, + "UnicodeHangulKorean.js": Object { + "size": "", + }, + "UnicodeHangulKorean.js.flow": Object { + "size": "", + }, + "UnicodeUtils.js": Object { + "size": "", + }, + "UnicodeUtils.js.flow": Object { + "size": "", + }, + "UnicodeUtilsExtra.js": Object { + "size": "", + }, + "UnicodeUtilsExtra.js.flow": Object { + "size": "", + }, + "UserAgent.js": Object { + "size": "", + }, + "UserAgent.js.flow": Object { + "size": "", + }, + "UserAgentData.js": Object { + "size": "", + }, + "UserAgentData.js.flow": Object { + "size": "", + }, + "VersionRange.js": Object { + "size": "", + }, + "VersionRange.js.flow": Object { + "size": "", + }, + "__mocks__": Object { + "files": Object { + "ErrorUtils.js": Object { + "size": "", + }, + "base62.js": Object { + "size": "", + }, + "crc32.js": Object { + "size": "", + }, + "fetch.js": Object { + "size": "", + }, + "fetchWithRetries.js": Object { + "size": "", + }, + "nullthrows.js": Object { + "size": "", + }, + }, + }, + "_shouldPolyfillES6Collection.js": Object { + "size": "", + }, + "_shouldPolyfillES6Collection.js.flow": Object { + "size": "", + }, + "areEqual.js": Object { + "size": "", + }, + "areEqual.js.flow": Object { + "size": "", + }, + "base62.js": Object { + "size": "", + }, + "base62.js.flow": Object { + "size": "", + }, + "camelize.js": Object { + "size": "", + }, + "camelize.js.flow": Object { + "size": "", + }, + "camelizeStyleName.js": Object { + "size": "", + }, + "camelizeStyleName.js.flow": Object { + "size": "", + }, + "compactArray.js": Object { + "size": "", + }, + "compactArray.js.flow": Object { + "size": "", + }, + "concatAllArray.js": Object { + "size": "", + }, + "concatAllArray.js.flow": Object { + "size": "", + }, + "containsNode.js": Object { + "size": "", + }, + "containsNode.js.flow": Object { + "size": "", + }, + "countDistinct.js": Object { + "size": "", + }, + "countDistinct.js.flow": Object { + "size": "", + }, + "crc32.js": Object { + "size": "", + }, + "crc32.js.flow": Object { + "size": "", + }, + "createArrayFromMixed.js": Object { + "size": "", + }, + "createArrayFromMixed.js.flow": Object { + "size": "", + }, + "createNodesFromMarkup.js": Object { + "size": "", + }, + "createNodesFromMarkup.js.flow": Object { + "size": "", + }, + "cx.js": Object { + "size": "", + }, + "cx.js.flow": Object { + "size": "", + }, + "distinctArray.js": Object { + "size": "", + }, + "distinctArray.js.flow": Object { + "size": "", + }, + "emptyFunction.js": Object { + "size": "", + }, + "emptyFunction.js.flow": Object { + "size": "", + }, + "emptyObject.js": Object { + "size": "", + }, + "emptyObject.js.flow": Object { + "size": "", + }, + "enumerate.js": Object { + "size": "", + }, + "enumerate.js.flow": Object { + "size": "", + }, + "equalsIterable.js": Object { + "size": "", + }, + "equalsIterable.js.flow": Object { + "size": "", + }, + "equalsSet.js": Object { + "size": "", + }, + "equalsSet.js.flow": Object { + "size": "", + }, + "everyObject.js": Object { + "size": "", + }, + "everyObject.js.flow": Object { + "size": "", + }, + "everySet.js": Object { + "size": "", + }, + "everySet.js.flow": Object { + "size": "", + }, + "fetch.js": Object { + "size": "", + }, + "fetch.js.flow": Object { + "size": "", + }, + "fetchWithRetries.js": Object { + "size": "", + }, + "fetchWithRetries.js.flow": Object { + "size": "", + }, + "filterObject.js": Object { + "size": "", + }, + "filterObject.js.flow": Object { + "size": "", + }, + "flatMapArray.js": Object { + "size": "", + }, + "flatMapArray.js.flow": Object { + "size": "", + }, + "flattenArray.js": Object { + "size": "", + }, + "flattenArray.js.flow": Object { + "size": "", + }, + "focusNode.js": Object { + "size": "", + }, + "focusNode.js.flow": Object { + "size": "", + }, + "forEachObject.js": Object { + "size": "", + }, + "forEachObject.js.flow": Object { + "size": "", + }, + "getActiveElement.js": Object { + "size": "", + }, + "getActiveElement.js.flow": Object { + "size": "", + }, + "getDocumentScrollElement.js": Object { + "size": "", + }, + "getDocumentScrollElement.js.flow": Object { + "size": "", + }, + "getElementPosition.js": Object { + "size": "", + }, + "getElementPosition.js.flow": Object { + "size": "", + }, + "getElementRect.js": Object { + "size": "", + }, + "getElementRect.js.flow": Object { + "size": "", + }, + "getMarkupWrap.js": Object { + "size": "", + }, + "getMarkupWrap.js.flow": Object { + "size": "", + }, + "getScrollPosition.js": Object { + "size": "", + }, + "getScrollPosition.js.flow": Object { + "size": "", + }, + "getStyleProperty.js": Object { + "size": "", + }, + "getStyleProperty.js.flow": Object { + "size": "", + }, + "getUnboundedScrollPosition.js": Object { + "size": "", + }, + "getUnboundedScrollPosition.js.flow": Object { + "size": "", + }, + "getViewportDimensions.js": Object { + "size": "", + }, + "getViewportDimensions.js.flow": Object { + "size": "", + }, + "groupArray.js": Object { + "size": "", + }, + "groupArray.js.flow": Object { + "size": "", + }, + "hyphenate.js": Object { + "size": "", + }, + "hyphenate.js.flow": Object { + "size": "", + }, + "hyphenateStyleName.js": Object { + "size": "", + }, + "hyphenateStyleName.js.flow": Object { + "size": "", + }, + "invariant.js": Object { + "size": "", + }, + "invariant.js.flow": Object { + "size": "", + }, + "isEmpty.js": Object { + "size": "", + }, + "isEmpty.js.flow": Object { + "size": "", + }, + "isNode.js": Object { + "size": "", + }, + "isNode.js.flow": Object { + "size": "", + }, + "isTextNode.js": Object { + "size": "", + }, + "isTextNode.js.flow": Object { + "size": "", + }, + "joinClasses.js": Object { + "size": "", + }, + "joinClasses.js.flow": Object { + "size": "", + }, + "keyMirror.js": Object { + "size": "", + }, + "keyMirror.js.flow": Object { + "size": "", + }, + "keyMirrorRecursive.js": Object { + "size": "", + }, + "keyMirrorRecursive.js.flow": Object { + "size": "", + }, + "keyOf.js": Object { + "size": "", + }, + "keyOf.js.flow": Object { + "size": "", + }, + "mapObject.js": Object { + "size": "", + }, + "mapObject.js.flow": Object { + "size": "", + }, + "maxBy.js": Object { + "size": "", + }, + "maxBy.js.flow": Object { + "size": "", + }, + "memoizeStringOnly.js": Object { + "size": "", + }, + "memoizeStringOnly.js.flow": Object { + "size": "", + }, + "minBy.js": Object { + "size": "", + }, + "minBy.js.flow": Object { + "size": "", + }, + "monitorCodeUse.js": Object { + "size": "", + }, + "monitorCodeUse.js.flow": Object { + "size": "", + }, + "nativeRequestAnimationFrame.js": Object { + "size": "", + }, + "nativeRequestAnimationFrame.js.flow": Object { + "size": "", + }, + "nullthrows.js": Object { + "size": "", + }, + "nullthrows.js.flow": Object { + "size": "", + }, + "partitionArray.js": Object { + "size": "", + }, + "partitionArray.js.flow": Object { + "size": "", + }, + "partitionObject.js": Object { + "size": "", + }, + "partitionObject.js.flow": Object { + "size": "", + }, + "partitionObjectByKey.js": Object { + "size": "", + }, + "partitionObjectByKey.js.flow": Object { + "size": "", + }, + "performance.js": Object { + "size": "", + }, + "performance.js.flow": Object { + "size": "", + }, + "performanceNow.js": Object { + "size": "", + }, + "performanceNow.js.flow": Object { + "size": "", + }, + "removeFromArray.js": Object { + "size": "", + }, + "removeFromArray.js.flow": Object { + "size": "", + }, + "requestAnimationFrame.js": Object { + "size": "", + }, + "requestAnimationFrame.js.flow": Object { + "size": "", + }, + "resolveImmediate.js": Object { + "size": "", + }, + "resolveImmediate.js.flow": Object { + "size": "", + }, + "setImmediate.js": Object { + "size": "", + }, + "setImmediate.js.flow": Object { + "size": "", + }, + "shallowEqual.js": Object { + "size": "", + }, + "shallowEqual.js.flow": Object { + "size": "", + }, + "someObject.js": Object { + "size": "", + }, + "someObject.js.flow": Object { + "size": "", + }, + "someSet.js": Object { + "size": "", + }, + "someSet.js.flow": Object { + "size": "", + }, + "sprintf.js": Object { + "size": "", + }, + "sprintf.js.flow": Object { + "size": "", + }, + "warning.js": Object { + "size": "", + }, + "warning.js.flow": Object { + "size": "", + }, + "xhrSimpleDataSerializer.js": Object { + "size": "", + }, + "xhrSimpleDataSerializer.js.flow": Object { + "size": "", + }, + }, + }, + "module-map.json": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + }, + }, + "iconv-lite": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "encodings": Object { + "files": Object { + "dbcs-codec.js": Object { + "size": "", + }, + "dbcs-data.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "internal.js": Object { + "size": "", + }, + "sbcs-codec.js": Object { + "size": "", + }, + "sbcs-data-generated.js": Object { + "size": "", + }, + "sbcs-data.js": Object { + "size": "", + }, + "tables": Object { + "files": Object { + "big5-added.json": Object { + "size": "", + }, + "cp936.json": Object { + "size": "", + }, + "cp949.json": Object { + "size": "", + }, + "cp950.json": Object { + "size": "", + }, + "eucjp.json": Object { + "size": "", + }, + "gb18030-ranges.json": Object { + "size": "", + }, + "gbk-added.json": Object { + "size": "", + }, + "shiftjis.json": Object { + "size": "", + }, + }, + }, + "utf16.js": Object { + "size": "", + }, + "utf32.js": Object { + "size": "", + }, + "utf7.js": Object { + "size": "", + }, + }, + }, + "lib": Object { + "files": Object { + "bom-handling.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "streams.js": Object { + "size": "", + }, + }, + }, + "package.json": Object { + "size": "", + }, + }, + }, + "is-stream": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + "license": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + }, + }, + "isomorphic-fetch": Object { + "files": Object { + ".editorconfig": Object { + "size": "", + }, + "LICENSE": Object { + "size": "", + }, + "bower.json": Object { + "size": "", + }, + "fetch-bower.js": Object { + "size": "", + }, + "fetch-npm-browserify.js": Object { + "size": "", + }, + "fetch-npm-node.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + }, + }, + "js-tokens": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + }, + }, + "lodash": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "_DataView.js": Object { + "size": "", + }, + "_Hash.js": Object { + "size": "", + }, + "_LazyWrapper.js": Object { + "size": "", + }, + "_ListCache.js": Object { + "size": "", + }, + "_LodashWrapper.js": Object { + "size": "", + }, + "_Map.js": Object { + "size": "", + }, + "_MapCache.js": Object { + "size": "", + }, + "_Promise.js": Object { + "size": "", + }, + "_Set.js": Object { + "size": "", + }, + "_SetCache.js": Object { + "size": "", + }, + "_Stack.js": Object { + "size": "", + }, + "_Symbol.js": Object { + "size": "", + }, + "_Uint8Array.js": Object { + "size": "", + }, + "_WeakMap.js": Object { + "size": "", + }, + "_apply.js": Object { + "size": "", + }, + "_arrayAggregator.js": Object { + "size": "", + }, + "_arrayEach.js": Object { + "size": "", + }, + "_arrayEachRight.js": Object { + "size": "", + }, + "_arrayEvery.js": Object { + "size": "", + }, + "_arrayFilter.js": Object { + "size": "", + }, + "_arrayIncludes.js": Object { + "size": "", + }, + "_arrayIncludesWith.js": Object { + "size": "", + }, + "_arrayLikeKeys.js": Object { + "size": "", + }, + "_arrayMap.js": Object { + "size": "", + }, + "_arrayPush.js": Object { + "size": "", + }, + "_arrayReduce.js": Object { + "size": "", + }, + "_arrayReduceRight.js": Object { + "size": "", + }, + "_arraySample.js": Object { + "size": "", + }, + "_arraySampleSize.js": Object { + "size": "", + }, + "_arrayShuffle.js": Object { + "size": "", + }, + "_arraySome.js": Object { + "size": "", + }, + "_asciiSize.js": Object { + "size": "", + }, + "_asciiToArray.js": Object { + "size": "", + }, + "_asciiWords.js": Object { + "size": "", + }, + "_assignMergeValue.js": Object { + "size": "", + }, + "_assignValue.js": Object { + "size": "", + }, + "_assocIndexOf.js": Object { + "size": "", + }, + "_baseAggregator.js": Object { + "size": "", + }, + "_baseAssign.js": Object { + "size": "", + }, + "_baseAssignIn.js": Object { + "size": "", + }, + "_baseAssignValue.js": Object { + "size": "", + }, + "_baseAt.js": Object { + "size": "", + }, + "_baseClamp.js": Object { + "size": "", + }, + "_baseClone.js": Object { + "size": "", + }, + "_baseConforms.js": Object { + "size": "", + }, + "_baseConformsTo.js": Object { + "size": "", + }, + "_baseCreate.js": Object { + "size": "", + }, + "_baseDelay.js": Object { + "size": "", + }, + "_baseDifference.js": Object { + "size": "", + }, + "_baseEach.js": Object { + "size": "", + }, + "_baseEachRight.js": Object { + "size": "", + }, + "_baseEvery.js": Object { + "size": "", + }, + "_baseExtremum.js": Object { + "size": "", + }, + "_baseFill.js": Object { + "size": "", + }, + "_baseFilter.js": Object { + "size": "", + }, + "_baseFindIndex.js": Object { + "size": "", + }, + "_baseFindKey.js": Object { + "size": "", + }, + "_baseFlatten.js": Object { + "size": "", + }, + "_baseFor.js": Object { + "size": "", + }, + "_baseForOwn.js": Object { + "size": "", + }, + "_baseForOwnRight.js": Object { + "size": "", + }, + "_baseForRight.js": Object { + "size": "", + }, + "_baseFunctions.js": Object { + "size": "", + }, + "_baseGet.js": Object { + "size": "", + }, + "_baseGetAllKeys.js": Object { + "size": "", + }, + "_baseGetTag.js": Object { + "size": "", + }, + "_baseGt.js": Object { + "size": "", + }, + "_baseHas.js": Object { + "size": "", + }, + "_baseHasIn.js": Object { + "size": "", + }, + "_baseInRange.js": Object { + "size": "", + }, + "_baseIndexOf.js": Object { + "size": "", + }, + "_baseIndexOfWith.js": Object { + "size": "", + }, + "_baseIntersection.js": Object { + "size": "", + }, + "_baseInverter.js": Object { + "size": "", + }, + "_baseInvoke.js": Object { + "size": "", + }, + "_baseIsArguments.js": Object { + "size": "", + }, + "_baseIsArrayBuffer.js": Object { + "size": "", + }, + "_baseIsDate.js": Object { + "size": "", + }, + "_baseIsEqual.js": Object { + "size": "", + }, + "_baseIsEqualDeep.js": Object { + "size": "", + }, + "_baseIsMap.js": Object { + "size": "", + }, + "_baseIsMatch.js": Object { + "size": "", + }, + "_baseIsNaN.js": Object { + "size": "", + }, + "_baseIsNative.js": Object { + "size": "", + }, + "_baseIsRegExp.js": Object { + "size": "", + }, + "_baseIsSet.js": Object { + "size": "", + }, + "_baseIsTypedArray.js": Object { + "size": "", + }, + "_baseIteratee.js": Object { + "size": "", + }, + "_baseKeys.js": Object { + "size": "", + }, + "_baseKeysIn.js": Object { + "size": "", + }, + "_baseLodash.js": Object { + "size": "", + }, + "_baseLt.js": Object { + "size": "", + }, + "_baseMap.js": Object { + "size": "", + }, + "_baseMatches.js": Object { + "size": "", + }, + "_baseMatchesProperty.js": Object { + "size": "", + }, + "_baseMean.js": Object { + "size": "", + }, + "_baseMerge.js": Object { + "size": "", + }, + "_baseMergeDeep.js": Object { + "size": "", + }, + "_baseNth.js": Object { + "size": "", + }, + "_baseOrderBy.js": Object { + "size": "", + }, + "_basePick.js": Object { + "size": "", + }, + "_basePickBy.js": Object { + "size": "", + }, + "_baseProperty.js": Object { + "size": "", + }, + "_basePropertyDeep.js": Object { + "size": "", + }, + "_basePropertyOf.js": Object { + "size": "", + }, + "_basePullAll.js": Object { + "size": "", + }, + "_basePullAt.js": Object { + "size": "", + }, + "_baseRandom.js": Object { + "size": "", + }, + "_baseRange.js": Object { + "size": "", + }, + "_baseReduce.js": Object { + "size": "", + }, + "_baseRepeat.js": Object { + "size": "", + }, + "_baseRest.js": Object { + "size": "", + }, + "_baseSample.js": Object { + "size": "", + }, + "_baseSampleSize.js": Object { + "size": "", + }, + "_baseSet.js": Object { + "size": "", + }, + "_baseSetData.js": Object { + "size": "", + }, + "_baseSetToString.js": Object { + "size": "", + }, + "_baseShuffle.js": Object { + "size": "", + }, + "_baseSlice.js": Object { + "size": "", + }, + "_baseSome.js": Object { + "size": "", + }, + "_baseSortBy.js": Object { + "size": "", + }, + "_baseSortedIndex.js": Object { + "size": "", + }, + "_baseSortedIndexBy.js": Object { + "size": "", + }, + "_baseSortedUniq.js": Object { + "size": "", + }, + "_baseSum.js": Object { + "size": "", + }, + "_baseTimes.js": Object { + "size": "", + }, + "_baseToNumber.js": Object { + "size": "", + }, + "_baseToPairs.js": Object { + "size": "", + }, + "_baseToString.js": Object { + "size": "", + }, + "_baseTrim.js": Object { + "size": "", + }, + "_baseUnary.js": Object { + "size": "", + }, + "_baseUniq.js": Object { + "size": "", + }, + "_baseUnset.js": Object { + "size": "", + }, + "_baseUpdate.js": Object { + "size": "", + }, + "_baseValues.js": Object { + "size": "", + }, + "_baseWhile.js": Object { + "size": "", + }, + "_baseWrapperValue.js": Object { + "size": "", + }, + "_baseXor.js": Object { + "size": "", + }, + "_baseZipObject.js": Object { + "size": "", + }, + "_cacheHas.js": Object { + "size": "", + }, + "_castArrayLikeObject.js": Object { + "size": "", + }, + "_castFunction.js": Object { + "size": "", + }, + "_castPath.js": Object { + "size": "", + }, + "_castRest.js": Object { + "size": "", + }, + "_castSlice.js": Object { + "size": "", + }, + "_charsEndIndex.js": Object { + "size": "", + }, + "_charsStartIndex.js": Object { + "size": "", + }, + "_cloneArrayBuffer.js": Object { + "size": "", + }, + "_cloneBuffer.js": Object { + "size": "", + }, + "_cloneDataView.js": Object { + "size": "", + }, + "_cloneRegExp.js": Object { + "size": "", + }, + "_cloneSymbol.js": Object { + "size": "", + }, + "_cloneTypedArray.js": Object { + "size": "", + }, + "_compareAscending.js": Object { + "size": "", + }, + "_compareMultiple.js": Object { + "size": "", + }, + "_composeArgs.js": Object { + "size": "", + }, + "_composeArgsRight.js": Object { + "size": "", + }, + "_copyArray.js": Object { + "size": "", + }, + "_copyObject.js": Object { + "size": "", + }, + "_copySymbols.js": Object { + "size": "", + }, + "_copySymbolsIn.js": Object { + "size": "", + }, + "_coreJsData.js": Object { + "size": "", + }, + "_countHolders.js": Object { + "size": "", + }, + "_createAggregator.js": Object { + "size": "", + }, + "_createAssigner.js": Object { + "size": "", + }, + "_createBaseEach.js": Object { + "size": "", + }, + "_createBaseFor.js": Object { + "size": "", + }, + "_createBind.js": Object { + "size": "", + }, + "_createCaseFirst.js": Object { + "size": "", + }, + "_createCompounder.js": Object { + "size": "", + }, + "_createCtor.js": Object { + "size": "", + }, + "_createCurry.js": Object { + "size": "", + }, + "_createFind.js": Object { + "size": "", + }, + "_createFlow.js": Object { + "size": "", + }, + "_createHybrid.js": Object { + "size": "", + }, + "_createInverter.js": Object { + "size": "", + }, + "_createMathOperation.js": Object { + "size": "", + }, + "_createOver.js": Object { + "size": "", + }, + "_createPadding.js": Object { + "size": "", + }, + "_createPartial.js": Object { + "size": "", + }, + "_createRange.js": Object { + "size": "", + }, + "_createRecurry.js": Object { + "size": "", + }, + "_createRelationalOperation.js": Object { + "size": "", + }, + "_createRound.js": Object { + "size": "", + }, + "_createSet.js": Object { + "size": "", + }, + "_createToPairs.js": Object { + "size": "", + }, + "_createWrap.js": Object { + "size": "", + }, + "_customDefaultsAssignIn.js": Object { + "size": "", + }, + "_customDefaultsMerge.js": Object { + "size": "", + }, + "_customOmitClone.js": Object { + "size": "", + }, + "_deburrLetter.js": Object { + "size": "", + }, + "_defineProperty.js": Object { + "size": "", + }, + "_equalArrays.js": Object { + "size": "", + }, + "_equalByTag.js": Object { + "size": "", + }, + "_equalObjects.js": Object { + "size": "", + }, + "_escapeHtmlChar.js": Object { + "size": "", + }, + "_escapeStringChar.js": Object { + "size": "", + }, + "_flatRest.js": Object { + "size": "", + }, + "_freeGlobal.js": Object { + "size": "", + }, + "_getAllKeys.js": Object { + "size": "", + }, + "_getAllKeysIn.js": Object { + "size": "", + }, + "_getData.js": Object { + "size": "", + }, + "_getFuncName.js": Object { + "size": "", + }, + "_getHolder.js": Object { + "size": "", + }, + "_getMapData.js": Object { + "size": "", + }, + "_getMatchData.js": Object { + "size": "", + }, + "_getNative.js": Object { + "size": "", + }, + "_getPrototype.js": Object { + "size": "", + }, + "_getRawTag.js": Object { + "size": "", + }, + "_getSymbols.js": Object { + "size": "", + }, + "_getSymbolsIn.js": Object { + "size": "", + }, + "_getTag.js": Object { + "size": "", + }, + "_getValue.js": Object { + "size": "", + }, + "_getView.js": Object { + "size": "", + }, + "_getWrapDetails.js": Object { + "size": "", + }, + "_hasPath.js": Object { + "size": "", + }, + "_hasUnicode.js": Object { + "size": "", + }, + "_hasUnicodeWord.js": Object { + "size": "", + }, + "_hashClear.js": Object { + "size": "", + }, + "_hashDelete.js": Object { + "size": "", + }, + "_hashGet.js": Object { + "size": "", + }, + "_hashHas.js": Object { + "size": "", + }, + "_hashSet.js": Object { + "size": "", + }, + "_initCloneArray.js": Object { + "size": "", + }, + "_initCloneByTag.js": Object { + "size": "", + }, + "_initCloneObject.js": Object { + "size": "", + }, + "_insertWrapDetails.js": Object { + "size": "", + }, + "_isFlattenable.js": Object { + "size": "", + }, + "_isIndex.js": Object { + "size": "", + }, + "_isIterateeCall.js": Object { + "size": "", + }, + "_isKey.js": Object { + "size": "", + }, + "_isKeyable.js": Object { + "size": "", + }, + "_isLaziable.js": Object { + "size": "", + }, + "_isMaskable.js": Object { + "size": "", + }, + "_isMasked.js": Object { + "size": "", + }, + "_isPrototype.js": Object { + "size": "", + }, + "_isStrictComparable.js": Object { + "size": "", + }, + "_iteratorToArray.js": Object { + "size": "", + }, + "_lazyClone.js": Object { + "size": "", + }, + "_lazyReverse.js": Object { + "size": "", + }, + "_lazyValue.js": Object { + "size": "", + }, + "_listCacheClear.js": Object { + "size": "", + }, + "_listCacheDelete.js": Object { + "size": "", + }, + "_listCacheGet.js": Object { + "size": "", + }, + "_listCacheHas.js": Object { + "size": "", + }, + "_listCacheSet.js": Object { + "size": "", + }, + "_mapCacheClear.js": Object { + "size": "", + }, + "_mapCacheDelete.js": Object { + "size": "", + }, + "_mapCacheGet.js": Object { + "size": "", + }, + "_mapCacheHas.js": Object { + "size": "", + }, + "_mapCacheSet.js": Object { + "size": "", + }, + "_mapToArray.js": Object { + "size": "", + }, + "_matchesStrictComparable.js": Object { + "size": "", + }, + "_memoizeCapped.js": Object { + "size": "", + }, + "_mergeData.js": Object { + "size": "", + }, + "_metaMap.js": Object { + "size": "", + }, + "_nativeCreate.js": Object { + "size": "", + }, + "_nativeKeys.js": Object { + "size": "", + }, + "_nativeKeysIn.js": Object { + "size": "", + }, + "_nodeUtil.js": Object { + "size": "", + }, + "_objectToString.js": Object { + "size": "", + }, + "_overArg.js": Object { + "size": "", + }, + "_overRest.js": Object { + "size": "", + }, + "_parent.js": Object { + "size": "", + }, + "_reEscape.js": Object { + "size": "", + }, + "_reEvaluate.js": Object { + "size": "", + }, + "_reInterpolate.js": Object { + "size": "", + }, + "_realNames.js": Object { + "size": "", + }, + "_reorder.js": Object { + "size": "", + }, + "_replaceHolders.js": Object { + "size": "", + }, + "_root.js": Object { + "size": "", + }, + "_safeGet.js": Object { + "size": "", + }, + "_setCacheAdd.js": Object { + "size": "", + }, + "_setCacheHas.js": Object { + "size": "", + }, + "_setData.js": Object { + "size": "", + }, + "_setToArray.js": Object { + "size": "", + }, + "_setToPairs.js": Object { + "size": "", + }, + "_setToString.js": Object { + "size": "", + }, + "_setWrapToString.js": Object { + "size": "", + }, + "_shortOut.js": Object { + "size": "", + }, + "_shuffleSelf.js": Object { + "size": "", + }, + "_stackClear.js": Object { + "size": "", + }, + "_stackDelete.js": Object { + "size": "", + }, + "_stackGet.js": Object { + "size": "", + }, + "_stackHas.js": Object { + "size": "", + }, + "_stackSet.js": Object { + "size": "", + }, + "_strictIndexOf.js": Object { + "size": "", + }, + "_strictLastIndexOf.js": Object { + "size": "", + }, + "_stringSize.js": Object { + "size": "", + }, + "_stringToArray.js": Object { + "size": "", + }, + "_stringToPath.js": Object { + "size": "", + }, + "_toKey.js": Object { + "size": "", + }, + "_toSource.js": Object { + "size": "", + }, + "_trimmedEndIndex.js": Object { + "size": "", + }, + "_unescapeHtmlChar.js": Object { + "size": "", + }, + "_unicodeSize.js": Object { + "size": "", + }, + "_unicodeToArray.js": Object { + "size": "", + }, + "_unicodeWords.js": Object { + "size": "", + }, + "_updateWrapDetails.js": Object { + "size": "", + }, + "_wrapperClone.js": Object { + "size": "", + }, + "add.js": Object { + "size": "", + }, + "after.js": Object { + "size": "", + }, + "array.js": Object { + "size": "", + }, + "ary.js": Object { + "size": "", + }, + "assign.js": Object { + "size": "", + }, + "assignIn.js": Object { + "size": "", + }, + "assignInWith.js": Object { + "size": "", + }, + "assignWith.js": Object { + "size": "", + }, + "at.js": Object { + "size": "", + }, + "attempt.js": Object { + "size": "", + }, + "before.js": Object { + "size": "", + }, + "bind.js": Object { + "size": "", + }, + "bindAll.js": Object { + "size": "", + }, + "bindKey.js": Object { + "size": "", + }, + "camelCase.js": Object { + "size": "", + }, + "capitalize.js": Object { + "size": "", + }, + "castArray.js": Object { + "size": "", + }, + "ceil.js": Object { + "size": "", + }, + "chain.js": Object { + "size": "", + }, + "chunk.js": Object { + "size": "", + }, + "clamp.js": Object { + "size": "", + }, + "clone.js": Object { + "size": "", + }, + "cloneDeep.js": Object { + "size": "", + }, + "cloneDeepWith.js": Object { + "size": "", + }, + "cloneWith.js": Object { + "size": "", + }, + "collection.js": Object { + "size": "", + }, + "commit.js": Object { + "size": "", + }, + "compact.js": Object { + "size": "", + }, + "concat.js": Object { + "size": "", + }, + "cond.js": Object { + "size": "", + }, + "conforms.js": Object { + "size": "", + }, + "conformsTo.js": Object { + "size": "", + }, + "constant.js": Object { + "size": "", + }, + "core.js": Object { + "size": "", + }, + "core.min.js": Object { + "size": "", + }, + "countBy.js": Object { + "size": "", + }, + "create.js": Object { + "size": "", + }, + "curry.js": Object { + "size": "", + }, + "curryRight.js": Object { + "size": "", + }, + "date.js": Object { + "size": "", + }, + "debounce.js": Object { + "size": "", + }, + "deburr.js": Object { + "size": "", + }, + "defaultTo.js": Object { + "size": "", + }, + "defaults.js": Object { + "size": "", + }, + "defaultsDeep.js": Object { + "size": "", + }, + "defer.js": Object { + "size": "", + }, + "delay.js": Object { + "size": "", + }, + "difference.js": Object { + "size": "", + }, + "differenceBy.js": Object { + "size": "", + }, + "differenceWith.js": Object { + "size": "", + }, + "divide.js": Object { + "size": "", + }, + "drop.js": Object { + "size": "", + }, + "dropRight.js": Object { + "size": "", + }, + "dropRightWhile.js": Object { + "size": "", + }, + "dropWhile.js": Object { + "size": "", + }, + "each.js": Object { + "size": "", + }, + "eachRight.js": Object { + "size": "", + }, + "endsWith.js": Object { + "size": "", + }, + "entries.js": Object { + "size": "", + }, + "entriesIn.js": Object { + "size": "", + }, + "eq.js": Object { + "size": "", + }, + "escape.js": Object { + "size": "", + }, + "escapeRegExp.js": Object { + "size": "", + }, + "every.js": Object { + "size": "", + }, + "extend.js": Object { + "size": "", + }, + "extendWith.js": Object { + "size": "", + }, + "fill.js": Object { + "size": "", + }, + "filter.js": Object { + "size": "", + }, + "find.js": Object { + "size": "", + }, + "findIndex.js": Object { + "size": "", + }, + "findKey.js": Object { + "size": "", + }, + "findLast.js": Object { + "size": "", + }, + "findLastIndex.js": Object { + "size": "", + }, + "findLastKey.js": Object { + "size": "", + }, + "first.js": Object { + "size": "", + }, + "flake.lock": Object { + "size": "", + }, + "flake.nix": Object { + "size": "", + }, + "flatMap.js": Object { + "size": "", + }, + "flatMapDeep.js": Object { + "size": "", + }, + "flatMapDepth.js": Object { + "size": "", + }, + "flatten.js": Object { + "size": "", + }, + "flattenDeep.js": Object { + "size": "", + }, + "flattenDepth.js": Object { + "size": "", + }, + "flip.js": Object { + "size": "", + }, + "floor.js": Object { + "size": "", + }, + "flow.js": Object { + "size": "", + }, + "flowRight.js": Object { + "size": "", + }, + "forEach.js": Object { + "size": "", + }, + "forEachRight.js": Object { + "size": "", + }, + "forIn.js": Object { + "size": "", + }, + "forInRight.js": Object { + "size": "", + }, + "forOwn.js": Object { + "size": "", + }, + "forOwnRight.js": Object { + "size": "", + }, + "fp": Object { + "files": Object { + "F.js": Object { + "size": "", + }, + "T.js": Object { + "size": "", + }, + "__.js": Object { + "size": "", + }, + "_baseConvert.js": Object { + "size": "", + }, + "_convertBrowser.js": Object { + "size": "", + }, + "_falseOptions.js": Object { + "size": "", + }, + "_mapping.js": Object { + "size": "", + }, + "_util.js": Object { + "size": "", + }, + "add.js": Object { + "size": "", + }, + "after.js": Object { + "size": "", + }, + "all.js": Object { + "size": "", + }, + "allPass.js": Object { + "size": "", + }, + "always.js": Object { + "size": "", + }, + "any.js": Object { + "size": "", + }, + "anyPass.js": Object { + "size": "", + }, + "apply.js": Object { + "size": "", + }, + "array.js": Object { + "size": "", + }, + "ary.js": Object { + "size": "", + }, + "assign.js": Object { + "size": "", + }, + "assignAll.js": Object { + "size": "", + }, + "assignAllWith.js": Object { + "size": "", + }, + "assignIn.js": Object { + "size": "", + }, + "assignInAll.js": Object { + "size": "", + }, + "assignInAllWith.js": Object { + "size": "", + }, + "assignInWith.js": Object { + "size": "", + }, + "assignWith.js": Object { + "size": "", + }, + "assoc.js": Object { + "size": "", + }, + "assocPath.js": Object { + "size": "", + }, + "at.js": Object { + "size": "", + }, + "attempt.js": Object { + "size": "", + }, + "before.js": Object { + "size": "", + }, + "bind.js": Object { + "size": "", + }, + "bindAll.js": Object { + "size": "", + }, + "bindKey.js": Object { + "size": "", + }, + "camelCase.js": Object { + "size": "", + }, + "capitalize.js": Object { + "size": "", + }, + "castArray.js": Object { + "size": "", + }, + "ceil.js": Object { + "size": "", + }, + "chain.js": Object { + "size": "", + }, + "chunk.js": Object { + "size": "", + }, + "clamp.js": Object { + "size": "", + }, + "clone.js": Object { + "size": "", + }, + "cloneDeep.js": Object { + "size": "", + }, + "cloneDeepWith.js": Object { + "size": "", + }, + "cloneWith.js": Object { + "size": "", + }, + "collection.js": Object { + "size": "", + }, + "commit.js": Object { + "size": "", + }, + "compact.js": Object { + "size": "", + }, + "complement.js": Object { + "size": "", + }, + "compose.js": Object { + "size": "", + }, + "concat.js": Object { + "size": "", + }, + "cond.js": Object { + "size": "", + }, + "conforms.js": Object { + "size": "", + }, + "conformsTo.js": Object { + "size": "", + }, + "constant.js": Object { + "size": "", + }, + "contains.js": Object { + "size": "", + }, + "convert.js": Object { + "size": "", + }, + "countBy.js": Object { + "size": "", + }, + "create.js": Object { + "size": "", + }, + "curry.js": Object { + "size": "", + }, + "curryN.js": Object { + "size": "", + }, + "curryRight.js": Object { + "size": "", + }, + "curryRightN.js": Object { + "size": "", + }, + "date.js": Object { + "size": "", + }, + "debounce.js": Object { + "size": "", + }, + "deburr.js": Object { + "size": "", + }, + "defaultTo.js": Object { + "size": "", + }, + "defaults.js": Object { + "size": "", + }, + "defaultsAll.js": Object { + "size": "", + }, + "defaultsDeep.js": Object { + "size": "", + }, + "defaultsDeepAll.js": Object { + "size": "", + }, + "defer.js": Object { + "size": "", + }, + "delay.js": Object { + "size": "", + }, + "difference.js": Object { + "size": "", + }, + "differenceBy.js": Object { + "size": "", + }, + "differenceWith.js": Object { + "size": "", + }, + "dissoc.js": Object { + "size": "", + }, + "dissocPath.js": Object { + "size": "", + }, + "divide.js": Object { + "size": "", + }, + "drop.js": Object { + "size": "", + }, + "dropLast.js": Object { + "size": "", + }, + "dropLastWhile.js": Object { + "size": "", + }, + "dropRight.js": Object { + "size": "", + }, + "dropRightWhile.js": Object { + "size": "", + }, + "dropWhile.js": Object { + "size": "", + }, + "each.js": Object { + "size": "", + }, + "eachRight.js": Object { + "size": "", + }, + "endsWith.js": Object { + "size": "", + }, + "entries.js": Object { + "size": "", + }, + "entriesIn.js": Object { + "size": "", + }, + "eq.js": Object { + "size": "", + }, + "equals.js": Object { + "size": "", + }, + "escape.js": Object { + "size": "", + }, + "escapeRegExp.js": Object { + "size": "", + }, + "every.js": Object { + "size": "", + }, + "extend.js": Object { + "size": "", + }, + "extendAll.js": Object { + "size": "", + }, + "extendAllWith.js": Object { + "size": "", + }, + "extendWith.js": Object { + "size": "", + }, + "fill.js": Object { + "size": "", + }, + "filter.js": Object { + "size": "", + }, + "find.js": Object { + "size": "", + }, + "findFrom.js": Object { + "size": "", + }, + "findIndex.js": Object { + "size": "", + }, + "findIndexFrom.js": Object { + "size": "", + }, + "findKey.js": Object { + "size": "", + }, + "findLast.js": Object { + "size": "", + }, + "findLastFrom.js": Object { + "size": "", + }, + "findLastIndex.js": Object { + "size": "", + }, + "findLastIndexFrom.js": Object { + "size": "", + }, + "findLastKey.js": Object { + "size": "", + }, + "first.js": Object { + "size": "", + }, + "flatMap.js": Object { + "size": "", + }, + "flatMapDeep.js": Object { + "size": "", + }, + "flatMapDepth.js": Object { + "size": "", + }, + "flatten.js": Object { + "size": "", + }, + "flattenDeep.js": Object { + "size": "", + }, + "flattenDepth.js": Object { + "size": "", + }, + "flip.js": Object { + "size": "", + }, + "floor.js": Object { + "size": "", + }, + "flow.js": Object { + "size": "", + }, + "flowRight.js": Object { + "size": "", + }, + "forEach.js": Object { + "size": "", + }, + "forEachRight.js": Object { + "size": "", + }, + "forIn.js": Object { + "size": "", + }, + "forInRight.js": Object { + "size": "", + }, + "forOwn.js": Object { + "size": "", + }, + "forOwnRight.js": Object { + "size": "", + }, + "fromPairs.js": Object { + "size": "", + }, + "function.js": Object { + "size": "", + }, + "functions.js": Object { + "size": "", + }, + "functionsIn.js": Object { + "size": "", + }, + "get.js": Object { + "size": "", + }, + "getOr.js": Object { + "size": "", + }, + "groupBy.js": Object { + "size": "", + }, + "gt.js": Object { + "size": "", + }, + "gte.js": Object { + "size": "", + }, + "has.js": Object { + "size": "", + }, + "hasIn.js": Object { + "size": "", + }, + "head.js": Object { + "size": "", + }, + "identical.js": Object { + "size": "", + }, + "identity.js": Object { + "size": "", + }, + "inRange.js": Object { + "size": "", + }, + "includes.js": Object { + "size": "", + }, + "includesFrom.js": Object { + "size": "", + }, + "indexBy.js": Object { + "size": "", + }, + "indexOf.js": Object { + "size": "", + }, + "indexOfFrom.js": Object { + "size": "", + }, + "init.js": Object { + "size": "", + }, + "initial.js": Object { + "size": "", + }, + "intersection.js": Object { + "size": "", + }, + "intersectionBy.js": Object { + "size": "", + }, + "intersectionWith.js": Object { + "size": "", + }, + "invert.js": Object { + "size": "", + }, + "invertBy.js": Object { + "size": "", + }, + "invertObj.js": Object { + "size": "", + }, + "invoke.js": Object { + "size": "", + }, + "invokeArgs.js": Object { + "size": "", + }, + "invokeArgsMap.js": Object { + "size": "", + }, + "invokeMap.js": Object { + "size": "", + }, + "isArguments.js": Object { + "size": "", + }, + "isArray.js": Object { + "size": "", + }, + "isArrayBuffer.js": Object { + "size": "", + }, + "isArrayLike.js": Object { + "size": "", + }, + "isArrayLikeObject.js": Object { + "size": "", + }, + "isBoolean.js": Object { + "size": "", + }, + "isBuffer.js": Object { + "size": "", + }, + "isDate.js": Object { + "size": "", + }, + "isElement.js": Object { + "size": "", + }, + "isEmpty.js": Object { + "size": "", + }, + "isEqual.js": Object { + "size": "", + }, + "isEqualWith.js": Object { + "size": "", + }, + "isError.js": Object { + "size": "", + }, + "isFinite.js": Object { + "size": "", + }, + "isFunction.js": Object { + "size": "", + }, + "isInteger.js": Object { + "size": "", + }, + "isLength.js": Object { + "size": "", + }, + "isMap.js": Object { + "size": "", + }, + "isMatch.js": Object { + "size": "", + }, + "isMatchWith.js": Object { + "size": "", + }, + "isNaN.js": Object { + "size": "", + }, + "isNative.js": Object { + "size": "", + }, + "isNil.js": Object { + "size": "", + }, + "isNull.js": Object { + "size": "", + }, + "isNumber.js": Object { + "size": "", + }, + "isObject.js": Object { + "size": "", + }, + "isObjectLike.js": Object { + "size": "", + }, + "isPlainObject.js": Object { + "size": "", + }, + "isRegExp.js": Object { + "size": "", + }, + "isSafeInteger.js": Object { + "size": "", + }, + "isSet.js": Object { + "size": "", + }, + "isString.js": Object { + "size": "", + }, + "isSymbol.js": Object { + "size": "", + }, + "isTypedArray.js": Object { + "size": "", + }, + "isUndefined.js": Object { + "size": "", + }, + "isWeakMap.js": Object { + "size": "", + }, + "isWeakSet.js": Object { + "size": "", + }, + "iteratee.js": Object { + "size": "", + }, + "join.js": Object { + "size": "", + }, + "juxt.js": Object { + "size": "", + }, + "kebabCase.js": Object { + "size": "", + }, + "keyBy.js": Object { + "size": "", + }, + "keys.js": Object { + "size": "", + }, + "keysIn.js": Object { + "size": "", + }, + "lang.js": Object { + "size": "", + }, + "last.js": Object { + "size": "", + }, + "lastIndexOf.js": Object { + "size": "", + }, + "lastIndexOfFrom.js": Object { + "size": "", + }, + "lowerCase.js": Object { + "size": "", + }, + "lowerFirst.js": Object { + "size": "", + }, + "lt.js": Object { + "size": "", + }, + "lte.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "mapKeys.js": Object { + "size": "", + }, + "mapValues.js": Object { + "size": "", + }, + "matches.js": Object { + "size": "", + }, + "matchesProperty.js": Object { + "size": "", + }, + "math.js": Object { + "size": "", + }, + "max.js": Object { + "size": "", + }, + "maxBy.js": Object { + "size": "", + }, + "mean.js": Object { + "size": "", + }, + "meanBy.js": Object { + "size": "", + }, + "memoize.js": Object { + "size": "", + }, + "merge.js": Object { + "size": "", + }, + "mergeAll.js": Object { + "size": "", + }, + "mergeAllWith.js": Object { + "size": "", + }, + "mergeWith.js": Object { + "size": "", + }, + "method.js": Object { + "size": "", + }, + "methodOf.js": Object { + "size": "", + }, + "min.js": Object { + "size": "", + }, + "minBy.js": Object { + "size": "", + }, + "mixin.js": Object { + "size": "", + }, + "multiply.js": Object { + "size": "", + }, + "nAry.js": Object { + "size": "", + }, + "negate.js": Object { + "size": "", + }, + "next.js": Object { + "size": "", + }, + "noop.js": Object { + "size": "", + }, + "now.js": Object { + "size": "", + }, + "nth.js": Object { + "size": "", + }, + "nthArg.js": Object { + "size": "", + }, + "number.js": Object { + "size": "", + }, + "object.js": Object { + "size": "", + }, + "omit.js": Object { + "size": "", + }, + "omitAll.js": Object { + "size": "", + }, + "omitBy.js": Object { + "size": "", + }, + "once.js": Object { + "size": "", + }, + "orderBy.js": Object { + "size": "", + }, + "over.js": Object { + "size": "", + }, + "overArgs.js": Object { + "size": "", + }, + "overEvery.js": Object { + "size": "", + }, + "overSome.js": Object { + "size": "", + }, + "pad.js": Object { + "size": "", + }, + "padChars.js": Object { + "size": "", + }, + "padCharsEnd.js": Object { + "size": "", + }, + "padCharsStart.js": Object { + "size": "", + }, + "padEnd.js": Object { + "size": "", + }, + "padStart.js": Object { + "size": "", + }, + "parseInt.js": Object { + "size": "", + }, + "partial.js": Object { + "size": "", + }, + "partialRight.js": Object { + "size": "", + }, + "partition.js": Object { + "size": "", + }, + "path.js": Object { + "size": "", + }, + "pathEq.js": Object { + "size": "", + }, + "pathOr.js": Object { + "size": "", + }, + "paths.js": Object { + "size": "", + }, + "pick.js": Object { + "size": "", + }, + "pickAll.js": Object { + "size": "", + }, + "pickBy.js": Object { + "size": "", + }, + "pipe.js": Object { + "size": "", + }, + "placeholder.js": Object { + "size": "", + }, + "plant.js": Object { + "size": "", + }, + "pluck.js": Object { + "size": "", + }, + "prop.js": Object { + "size": "", + }, + "propEq.js": Object { + "size": "", + }, + "propOr.js": Object { + "size": "", + }, + "property.js": Object { + "size": "", + }, + "propertyOf.js": Object { + "size": "", + }, + "props.js": Object { + "size": "", + }, + "pull.js": Object { + "size": "", + }, + "pullAll.js": Object { + "size": "", + }, + "pullAllBy.js": Object { + "size": "", + }, + "pullAllWith.js": Object { + "size": "", + }, + "pullAt.js": Object { + "size": "", + }, + "random.js": Object { + "size": "", + }, + "range.js": Object { + "size": "", + }, + "rangeRight.js": Object { + "size": "", + }, + "rangeStep.js": Object { + "size": "", + }, + "rangeStepRight.js": Object { + "size": "", + }, + "rearg.js": Object { + "size": "", + }, + "reduce.js": Object { + "size": "", + }, + "reduceRight.js": Object { + "size": "", + }, + "reject.js": Object { + "size": "", + }, + "remove.js": Object { + "size": "", + }, + "repeat.js": Object { + "size": "", + }, + "replace.js": Object { + "size": "", + }, + "rest.js": Object { + "size": "", + }, + "restFrom.js": Object { + "size": "", + }, + "result.js": Object { + "size": "", + }, + "reverse.js": Object { + "size": "", + }, + "round.js": Object { + "size": "", + }, + "sample.js": Object { + "size": "", + }, + "sampleSize.js": Object { + "size": "", + }, + "seq.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + "setWith.js": Object { + "size": "", + }, + "shuffle.js": Object { + "size": "", + }, + "size.js": Object { + "size": "", + }, + "slice.js": Object { + "size": "", + }, + "snakeCase.js": Object { + "size": "", + }, + "some.js": Object { + "size": "", + }, + "sortBy.js": Object { + "size": "", + }, + "sortedIndex.js": Object { + "size": "", + }, + "sortedIndexBy.js": Object { + "size": "", + }, + "sortedIndexOf.js": Object { + "size": "", + }, + "sortedLastIndex.js": Object { + "size": "", + }, + "sortedLastIndexBy.js": Object { + "size": "", + }, + "sortedLastIndexOf.js": Object { + "size": "", + }, + "sortedUniq.js": Object { + "size": "", + }, + "sortedUniqBy.js": Object { + "size": "", + }, + "split.js": Object { + "size": "", + }, + "spread.js": Object { + "size": "", + }, + "spreadFrom.js": Object { + "size": "", + }, + "startCase.js": Object { + "size": "", + }, + "startsWith.js": Object { + "size": "", + }, + "string.js": Object { + "size": "", + }, + "stubArray.js": Object { + "size": "", + }, + "stubFalse.js": Object { + "size": "", + }, + "stubObject.js": Object { + "size": "", + }, + "stubString.js": Object { + "size": "", + }, + "stubTrue.js": Object { + "size": "", + }, + "subtract.js": Object { + "size": "", + }, + "sum.js": Object { + "size": "", + }, + "sumBy.js": Object { + "size": "", + }, + "symmetricDifference.js": Object { + "size": "", + }, + "symmetricDifferenceBy.js": Object { + "size": "", + }, + "symmetricDifferenceWith.js": Object { + "size": "", + }, + "tail.js": Object { + "size": "", + }, + "take.js": Object { + "size": "", + }, + "takeLast.js": Object { + "size": "", + }, + "takeLastWhile.js": Object { + "size": "", + }, + "takeRight.js": Object { + "size": "", + }, + "takeRightWhile.js": Object { + "size": "", + }, + "takeWhile.js": Object { + "size": "", + }, + "tap.js": Object { + "size": "", + }, + "template.js": Object { + "size": "", + }, + "templateSettings.js": Object { + "size": "", + }, + "throttle.js": Object { + "size": "", + }, + "thru.js": Object { + "size": "", + }, + "times.js": Object { + "size": "", + }, + "toArray.js": Object { + "size": "", + }, + "toFinite.js": Object { + "size": "", + }, + "toInteger.js": Object { + "size": "", + }, + "toIterator.js": Object { + "size": "", + }, + "toJSON.js": Object { + "size": "", + }, + "toLength.js": Object { + "size": "", + }, + "toLower.js": Object { + "size": "", + }, + "toNumber.js": Object { + "size": "", + }, + "toPairs.js": Object { + "size": "", + }, + "toPairsIn.js": Object { + "size": "", + }, + "toPath.js": Object { + "size": "", + }, + "toPlainObject.js": Object { + "size": "", + }, + "toSafeInteger.js": Object { + "size": "", + }, + "toString.js": Object { + "size": "", + }, + "toUpper.js": Object { + "size": "", + }, + "transform.js": Object { + "size": "", + }, + "trim.js": Object { + "size": "", + }, + "trimChars.js": Object { + "size": "", + }, + "trimCharsEnd.js": Object { + "size": "", + }, + "trimCharsStart.js": Object { + "size": "", + }, + "trimEnd.js": Object { + "size": "", + }, + "trimStart.js": Object { + "size": "", + }, + "truncate.js": Object { + "size": "", + }, + "unapply.js": Object { + "size": "", + }, + "unary.js": Object { + "size": "", + }, + "unescape.js": Object { + "size": "", + }, + "union.js": Object { + "size": "", + }, + "unionBy.js": Object { + "size": "", + }, + "unionWith.js": Object { + "size": "", + }, + "uniq.js": Object { + "size": "", + }, + "uniqBy.js": Object { + "size": "", + }, + "uniqWith.js": Object { + "size": "", + }, + "uniqueId.js": Object { + "size": "", + }, + "unnest.js": Object { + "size": "", + }, + "unset.js": Object { + "size": "", + }, + "unzip.js": Object { + "size": "", + }, + "unzipWith.js": Object { + "size": "", + }, + "update.js": Object { + "size": "", + }, + "updateWith.js": Object { + "size": "", + }, + "upperCase.js": Object { + "size": "", + }, + "upperFirst.js": Object { + "size": "", + }, + "useWith.js": Object { + "size": "", + }, + "util.js": Object { + "size": "", + }, + "value.js": Object { + "size": "", + }, + "valueOf.js": Object { + "size": "", + }, + "values.js": Object { + "size": "", + }, + "valuesIn.js": Object { + "size": "", + }, + "where.js": Object { + "size": "", + }, + "whereEq.js": Object { + "size": "", + }, + "without.js": Object { + "size": "", + }, + "words.js": Object { + "size": "", + }, + "wrap.js": Object { + "size": "", + }, + "wrapperAt.js": Object { + "size": "", + }, + "wrapperChain.js": Object { + "size": "", + }, + "wrapperLodash.js": Object { + "size": "", + }, + "wrapperReverse.js": Object { + "size": "", + }, + "wrapperValue.js": Object { + "size": "", + }, + "xor.js": Object { + "size": "", + }, + "xorBy.js": Object { + "size": "", + }, + "xorWith.js": Object { + "size": "", + }, + "zip.js": Object { + "size": "", + }, + "zipAll.js": Object { + "size": "", + }, + "zipObj.js": Object { + "size": "", + }, + "zipObject.js": Object { + "size": "", + }, + "zipObjectDeep.js": Object { + "size": "", + }, + "zipWith.js": Object { + "size": "", + }, + }, + }, + "fp.js": Object { + "size": "", + }, + "fromPairs.js": Object { + "size": "", + }, + "function.js": Object { + "size": "", + }, + "functions.js": Object { + "size": "", + }, + "functionsIn.js": Object { + "size": "", + }, + "get.js": Object { + "size": "", + }, + "groupBy.js": Object { + "size": "", + }, + "gt.js": Object { + "size": "", + }, + "gte.js": Object { + "size": "", + }, + "has.js": Object { + "size": "", + }, + "hasIn.js": Object { + "size": "", + }, + "head.js": Object { + "size": "", + }, + "identity.js": Object { + "size": "", + }, + "inRange.js": Object { + "size": "", + }, + "includes.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "indexOf.js": Object { + "size": "", + }, + "initial.js": Object { + "size": "", + }, + "intersection.js": Object { + "size": "", + }, + "intersectionBy.js": Object { + "size": "", + }, + "intersectionWith.js": Object { + "size": "", + }, + "invert.js": Object { + "size": "", + }, + "invertBy.js": Object { + "size": "", + }, + "invoke.js": Object { + "size": "", + }, + "invokeMap.js": Object { + "size": "", + }, + "isArguments.js": Object { + "size": "", + }, + "isArray.js": Object { + "size": "", + }, + "isArrayBuffer.js": Object { + "size": "", + }, + "isArrayLike.js": Object { + "size": "", + }, + "isArrayLikeObject.js": Object { + "size": "", + }, + "isBoolean.js": Object { + "size": "", + }, + "isBuffer.js": Object { + "size": "", + }, + "isDate.js": Object { + "size": "", + }, + "isElement.js": Object { + "size": "", + }, + "isEmpty.js": Object { + "size": "", + }, + "isEqual.js": Object { + "size": "", + }, + "isEqualWith.js": Object { + "size": "", + }, + "isError.js": Object { + "size": "", + }, + "isFinite.js": Object { + "size": "", + }, + "isFunction.js": Object { + "size": "", + }, + "isInteger.js": Object { + "size": "", + }, + "isLength.js": Object { + "size": "", + }, + "isMap.js": Object { + "size": "", + }, + "isMatch.js": Object { + "size": "", + }, + "isMatchWith.js": Object { + "size": "", + }, + "isNaN.js": Object { + "size": "", + }, + "isNative.js": Object { + "size": "", + }, + "isNil.js": Object { + "size": "", + }, + "isNull.js": Object { + "size": "", + }, + "isNumber.js": Object { + "size": "", + }, + "isObject.js": Object { + "size": "", + }, + "isObjectLike.js": Object { + "size": "", + }, + "isPlainObject.js": Object { + "size": "", + }, + "isRegExp.js": Object { + "size": "", + }, + "isSafeInteger.js": Object { + "size": "", + }, + "isSet.js": Object { + "size": "", + }, + "isString.js": Object { + "size": "", + }, + "isSymbol.js": Object { + "size": "", + }, + "isTypedArray.js": Object { + "size": "", + }, + "isUndefined.js": Object { + "size": "", + }, + "isWeakMap.js": Object { + "size": "", + }, + "isWeakSet.js": Object { + "size": "", + }, + "iteratee.js": Object { + "size": "", + }, + "join.js": Object { + "size": "", + }, + "kebabCase.js": Object { + "size": "", + }, + "keyBy.js": Object { + "size": "", + }, + "keys.js": Object { + "size": "", + }, + "keysIn.js": Object { + "size": "", + }, + "lang.js": Object { + "size": "", + }, + "last.js": Object { + "size": "", + }, + "lastIndexOf.js": Object { + "size": "", + }, + "lodash.js": Object { + "size": "", + }, + "lodash.min.js": Object { + "size": "", + }, + "lowerCase.js": Object { + "size": "", + }, + "lowerFirst.js": Object { + "size": "", + }, + "lt.js": Object { + "size": "", + }, + "lte.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "mapKeys.js": Object { + "size": "", + }, + "mapValues.js": Object { + "size": "", + }, + "matches.js": Object { + "size": "", + }, + "matchesProperty.js": Object { + "size": "", + }, + "math.js": Object { + "size": "", + }, + "max.js": Object { + "size": "", + }, + "maxBy.js": Object { + "size": "", + }, + "mean.js": Object { + "size": "", + }, + "meanBy.js": Object { + "size": "", + }, + "memoize.js": Object { + "size": "", + }, + "merge.js": Object { + "size": "", + }, + "mergeWith.js": Object { + "size": "", + }, + "method.js": Object { + "size": "", + }, + "methodOf.js": Object { + "size": "", + }, + "min.js": Object { + "size": "", + }, + "minBy.js": Object { + "size": "", + }, + "mixin.js": Object { + "size": "", + }, + "multiply.js": Object { + "size": "", + }, + "negate.js": Object { + "size": "", + }, + "next.js": Object { + "size": "", + }, + "noop.js": Object { + "size": "", + }, + "now.js": Object { + "size": "", + }, + "nth.js": Object { + "size": "", + }, + "nthArg.js": Object { + "size": "", + }, + "number.js": Object { + "size": "", + }, + "object.js": Object { + "size": "", + }, + "omit.js": Object { + "size": "", + }, + "omitBy.js": Object { + "size": "", + }, + "once.js": Object { + "size": "", + }, + "orderBy.js": Object { + "size": "", + }, + "over.js": Object { + "size": "", + }, + "overArgs.js": Object { + "size": "", + }, + "overEvery.js": Object { + "size": "", + }, + "overSome.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "pad.js": Object { + "size": "", + }, + "padEnd.js": Object { + "size": "", + }, + "padStart.js": Object { + "size": "", + }, + "parseInt.js": Object { + "size": "", + }, + "partial.js": Object { + "size": "", + }, + "partialRight.js": Object { + "size": "", + }, + "partition.js": Object { + "size": "", + }, + "pick.js": Object { + "size": "", + }, + "pickBy.js": Object { + "size": "", + }, + "plant.js": Object { + "size": "", + }, + "property.js": Object { + "size": "", + }, + "propertyOf.js": Object { + "size": "", + }, + "pull.js": Object { + "size": "", + }, + "pullAll.js": Object { + "size": "", + }, + "pullAllBy.js": Object { + "size": "", + }, + "pullAllWith.js": Object { + "size": "", + }, + "pullAt.js": Object { + "size": "", + }, + "random.js": Object { + "size": "", + }, + "range.js": Object { + "size": "", + }, + "rangeRight.js": Object { + "size": "", + }, + "rearg.js": Object { + "size": "", + }, + "reduce.js": Object { + "size": "", + }, + "reduceRight.js": Object { + "size": "", + }, + "reject.js": Object { + "size": "", + }, + "release.md": Object { + "size": "", + }, + "remove.js": Object { + "size": "", + }, + "repeat.js": Object { + "size": "", + }, + "replace.js": Object { + "size": "", + }, + "rest.js": Object { + "size": "", + }, + "result.js": Object { + "size": "", + }, + "reverse.js": Object { + "size": "", + }, + "round.js": Object { + "size": "", + }, + "sample.js": Object { + "size": "", + }, + "sampleSize.js": Object { + "size": "", + }, + "seq.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + "setWith.js": Object { + "size": "", + }, + "shuffle.js": Object { + "size": "", + }, + "size.js": Object { + "size": "", + }, + "slice.js": Object { + "size": "", + }, + "snakeCase.js": Object { + "size": "", + }, + "some.js": Object { + "size": "", + }, + "sortBy.js": Object { + "size": "", + }, + "sortedIndex.js": Object { + "size": "", + }, + "sortedIndexBy.js": Object { + "size": "", + }, + "sortedIndexOf.js": Object { + "size": "", + }, + "sortedLastIndex.js": Object { + "size": "", + }, + "sortedLastIndexBy.js": Object { + "size": "", + }, + "sortedLastIndexOf.js": Object { + "size": "", + }, + "sortedUniq.js": Object { + "size": "", + }, + "sortedUniqBy.js": Object { + "size": "", + }, + "split.js": Object { + "size": "", + }, + "spread.js": Object { + "size": "", + }, + "startCase.js": Object { + "size": "", + }, + "startsWith.js": Object { + "size": "", + }, + "string.js": Object { + "size": "", + }, + "stubArray.js": Object { + "size": "", + }, + "stubFalse.js": Object { + "size": "", + }, + "stubObject.js": Object { + "size": "", + }, + "stubString.js": Object { + "size": "", + }, + "stubTrue.js": Object { + "size": "", + }, + "subtract.js": Object { + "size": "", + }, + "sum.js": Object { + "size": "", + }, + "sumBy.js": Object { + "size": "", + }, + "tail.js": Object { + "size": "", + }, + "take.js": Object { + "size": "", + }, + "takeRight.js": Object { + "size": "", + }, + "takeRightWhile.js": Object { + "size": "", + }, + "takeWhile.js": Object { + "size": "", + }, + "tap.js": Object { + "size": "", + }, + "template.js": Object { + "size": "", + }, + "templateSettings.js": Object { + "size": "", + }, + "throttle.js": Object { + "size": "", + }, + "thru.js": Object { + "size": "", + }, + "times.js": Object { + "size": "", + }, + "toArray.js": Object { + "size": "", + }, + "toFinite.js": Object { + "size": "", + }, + "toInteger.js": Object { + "size": "", + }, + "toIterator.js": Object { + "size": "", + }, + "toJSON.js": Object { + "size": "", + }, + "toLength.js": Object { + "size": "", + }, + "toLower.js": Object { + "size": "", + }, + "toNumber.js": Object { + "size": "", + }, + "toPairs.js": Object { + "size": "", + }, + "toPairsIn.js": Object { + "size": "", + }, + "toPath.js": Object { + "size": "", + }, + "toPlainObject.js": Object { + "size": "", + }, + "toSafeInteger.js": Object { + "size": "", + }, + "toString.js": Object { + "size": "", + }, + "toUpper.js": Object { + "size": "", + }, + "transform.js": Object { + "size": "", + }, + "trim.js": Object { + "size": "", + }, + "trimEnd.js": Object { + "size": "", + }, + "trimStart.js": Object { + "size": "", + }, + "truncate.js": Object { + "size": "", + }, + "unary.js": Object { + "size": "", + }, + "unescape.js": Object { + "size": "", + }, + "union.js": Object { + "size": "", + }, + "unionBy.js": Object { + "size": "", + }, + "unionWith.js": Object { + "size": "", + }, + "uniq.js": Object { + "size": "", + }, + "uniqBy.js": Object { + "size": "", + }, + "uniqWith.js": Object { + "size": "", + }, + "uniqueId.js": Object { + "size": "", + }, + "unset.js": Object { + "size": "", + }, + "unzip.js": Object { + "size": "", + }, + "unzipWith.js": Object { + "size": "", + }, + "update.js": Object { + "size": "", + }, + "updateWith.js": Object { + "size": "", + }, + "upperCase.js": Object { + "size": "", + }, + "upperFirst.js": Object { + "size": "", + }, + "util.js": Object { + "size": "", + }, + "value.js": Object { + "size": "", + }, + "valueOf.js": Object { + "size": "", + }, + "values.js": Object { + "size": "", + }, + "valuesIn.js": Object { + "size": "", + }, + "without.js": Object { + "size": "", + }, + "words.js": Object { + "size": "", + }, + "wrap.js": Object { + "size": "", + }, + "wrapperAt.js": Object { + "size": "", + }, + "wrapperChain.js": Object { + "size": "", + }, + "wrapperLodash.js": Object { + "size": "", + }, + "wrapperReverse.js": Object { + "size": "", + }, + "wrapperValue.js": Object { + "size": "", + }, + "xor.js": Object { + "size": "", + }, + "xorBy.js": Object { + "size": "", + }, + "xorWith.js": Object { + "size": "", + }, + "zip.js": Object { + "size": "", + }, + "zipObject.js": Object { + "size": "", + }, + "zipObjectDeep.js": Object { + "size": "", + }, + "zipWith.js": Object { + "size": "", + }, + }, + }, + "loose-envify": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "cli.js": Object { + "executable": true, + "size": "", + }, + "custom.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "loose-envify.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "replace.js": Object { + "size": "", + }, + }, + }, + "moment": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "dist": Object { + "files": Object { + "locale": Object { + "files": Object { + "af.js": Object { + "size": "", + }, + "ar-dz.js": Object { + "size": "", + }, + "ar-kw.js": Object { + "size": "", + }, + "ar-ly.js": Object { + "size": "", + }, + "ar-ma.js": Object { + "size": "", + }, + "ar-ps.js": Object { + "size": "", + }, + "ar-sa.js": Object { + "size": "", + }, + "ar-tn.js": Object { + "size": "", + }, + "ar.js": Object { + "size": "", + }, + "az.js": Object { + "size": "", + }, + "be.js": Object { + "size": "", + }, + "bg.js": Object { + "size": "", + }, + "bm.js": Object { + "size": "", + }, + "bn-bd.js": Object { + "size": "", + }, + "bn.js": Object { + "size": "", + }, + "bo.js": Object { + "size": "", + }, + "br.js": Object { + "size": "", + }, + "bs.js": Object { + "size": "", + }, + "ca.js": Object { + "size": "", + }, + "cs.js": Object { + "size": "", + }, + "cv.js": Object { + "size": "", + }, + "cy.js": Object { + "size": "", + }, + "da.js": Object { + "size": "", + }, + "de-at.js": Object { + "size": "", + }, + "de-ch.js": Object { + "size": "", + }, + "de.js": Object { + "size": "", + }, + "dv.js": Object { + "size": "", + }, + "el.js": Object { + "size": "", + }, + "en-au.js": Object { + "size": "", + }, + "en-ca.js": Object { + "size": "", + }, + "en-gb.js": Object { + "size": "", + }, + "en-ie.js": Object { + "size": "", + }, + "en-il.js": Object { + "size": "", + }, + "en-in.js": Object { + "size": "", + }, + "en-nz.js": Object { + "size": "", + }, + "en-sg.js": Object { + "size": "", + }, + "eo.js": Object { + "size": "", + }, + "es-do.js": Object { + "size": "", + }, + "es-mx.js": Object { + "size": "", + }, + "es-us.js": Object { + "size": "", + }, + "es.js": Object { + "size": "", + }, + "et.js": Object { + "size": "", + }, + "eu.js": Object { + "size": "", + }, + "fa.js": Object { + "size": "", + }, + "fi.js": Object { + "size": "", + }, + "fil.js": Object { + "size": "", + }, + "fo.js": Object { + "size": "", + }, + "fr-ca.js": Object { + "size": "", + }, + "fr-ch.js": Object { + "size": "", + }, + "fr.js": Object { + "size": "", + }, + "fy.js": Object { + "size": "", + }, + "ga.js": Object { + "size": "", + }, + "gd.js": Object { + "size": "", + }, + "gl.js": Object { + "size": "", + }, + "gom-deva.js": Object { + "size": "", + }, + "gom-latn.js": Object { + "size": "", + }, + "gu.js": Object { + "size": "", + }, + "he.js": Object { + "size": "", + }, + "hi.js": Object { + "size": "", + }, + "hr.js": Object { + "size": "", + }, + "hu.js": Object { + "size": "", + }, + "hy-am.js": Object { + "size": "", + }, + "id.js": Object { + "size": "", + }, + "is.js": Object { + "size": "", + }, + "it-ch.js": Object { + "size": "", + }, + "it.js": Object { + "size": "", + }, + "ja.js": Object { + "size": "", + }, + "jv.js": Object { + "size": "", + }, + "ka.js": Object { + "size": "", + }, + "kk.js": Object { + "size": "", + }, + "km.js": Object { + "size": "", + }, + "kn.js": Object { + "size": "", + }, + "ko.js": Object { + "size": "", + }, + "ku-kmr.js": Object { + "size": "", + }, + "ku.js": Object { + "size": "", + }, + "ky.js": Object { + "size": "", + }, + "lb.js": Object { + "size": "", + }, + "lo.js": Object { + "size": "", + }, + "lt.js": Object { + "size": "", + }, + "lv.js": Object { + "size": "", + }, + "me.js": Object { + "size": "", + }, + "mi.js": Object { + "size": "", + }, + "mk.js": Object { + "size": "", + }, + "ml.js": Object { + "size": "", + }, + "mn.js": Object { + "size": "", + }, + "mr.js": Object { + "size": "", + }, + "ms-my.js": Object { + "size": "", + }, + "ms.js": Object { + "size": "", + }, + "mt.js": Object { + "size": "", + }, + "my.js": Object { + "size": "", + }, + "nb.js": Object { + "size": "", + }, + "ne.js": Object { + "size": "", + }, + "nl-be.js": Object { + "size": "", + }, + "nl.js": Object { + "size": "", + }, + "nn.js": Object { + "size": "", + }, + "oc-lnc.js": Object { + "size": "", + }, + "pa-in.js": Object { + "size": "", + }, + "pl.js": Object { + "size": "", + }, + "pt-br.js": Object { + "size": "", + }, + "pt.js": Object { + "size": "", + }, + "ro.js": Object { + "size": "", + }, + "ru.js": Object { + "size": "", + }, + "sd.js": Object { + "size": "", + }, + "se.js": Object { + "size": "", + }, + "si.js": Object { + "size": "", + }, + "sk.js": Object { + "size": "", + }, + "sl.js": Object { + "size": "", + }, + "sq.js": Object { + "size": "", + }, + "sr-cyrl.js": Object { + "size": "", + }, + "sr.js": Object { + "size": "", + }, + "ss.js": Object { + "size": "", + }, + "sv.js": Object { + "size": "", + }, + "sw.js": Object { + "size": "", + }, + "ta.js": Object { + "size": "", + }, + "te.js": Object { + "size": "", + }, + "tet.js": Object { + "size": "", + }, + "tg.js": Object { + "size": "", + }, + "th.js": Object { + "size": "", + }, + "tk.js": Object { + "size": "", + }, + "tl-ph.js": Object { + "size": "", + }, + "tlh.js": Object { + "size": "", + }, + "tr.js": Object { + "size": "", + }, + "tzl.js": Object { + "size": "", + }, + "tzm-latn.js": Object { + "size": "", + }, + "tzm.js": Object { + "size": "", + }, + "ug-cn.js": Object { + "size": "", + }, + "uk.js": Object { + "size": "", + }, + "ur.js": Object { + "size": "", + }, + "uz-latn.js": Object { + "size": "", + }, + "uz.js": Object { + "size": "", + }, + "vi.js": Object { + "size": "", + }, + "x-pseudo.js": Object { + "size": "", + }, + "yo.js": Object { + "size": "", + }, + "zh-cn.js": Object { + "size": "", + }, + "zh-hk.js": Object { + "size": "", + }, + "zh-mo.js": Object { + "size": "", + }, + "zh-tw.js": Object { + "size": "", + }, + }, + }, + "moment.js": Object { + "size": "", + }, + }, + }, + "ender.js": Object { + "size": "", + }, + "locale": Object { + "files": Object { + "af.js": Object { + "size": "", + }, + "ar-dz.js": Object { + "size": "", + }, + "ar-kw.js": Object { + "size": "", + }, + "ar-ly.js": Object { + "size": "", + }, + "ar-ma.js": Object { + "size": "", + }, + "ar-ps.js": Object { + "size": "", + }, + "ar-sa.js": Object { + "size": "", + }, + "ar-tn.js": Object { + "size": "", + }, + "ar.js": Object { + "size": "", + }, + "az.js": Object { + "size": "", + }, + "be.js": Object { + "size": "", + }, + "bg.js": Object { + "size": "", + }, + "bm.js": Object { + "size": "", + }, + "bn-bd.js": Object { + "size": "", + }, + "bn.js": Object { + "size": "", + }, + "bo.js": Object { + "size": "", + }, + "br.js": Object { + "size": "", + }, + "bs.js": Object { + "size": "", + }, + "ca.js": Object { + "size": "", + }, + "cs.js": Object { + "size": "", + }, + "cv.js": Object { + "size": "", + }, + "cy.js": Object { + "size": "", + }, + "da.js": Object { + "size": "", + }, + "de-at.js": Object { + "size": "", + }, + "de-ch.js": Object { + "size": "", + }, + "de.js": Object { + "size": "", + }, + "dv.js": Object { + "size": "", + }, + "el.js": Object { + "size": "", + }, + "en-au.js": Object { + "size": "", + }, + "en-ca.js": Object { + "size": "", + }, + "en-gb.js": Object { + "size": "", + }, + "en-ie.js": Object { + "size": "", + }, + "en-il.js": Object { + "size": "", + }, + "en-in.js": Object { + "size": "", + }, + "en-nz.js": Object { + "size": "", + }, + "en-sg.js": Object { + "size": "", + }, + "eo.js": Object { + "size": "", + }, + "es-do.js": Object { + "size": "", + }, + "es-mx.js": Object { + "size": "", + }, + "es-us.js": Object { + "size": "", + }, + "es.js": Object { + "size": "", + }, + "et.js": Object { + "size": "", + }, + "eu.js": Object { + "size": "", + }, + "fa.js": Object { + "size": "", + }, + "fi.js": Object { + "size": "", + }, + "fil.js": Object { + "size": "", + }, + "fo.js": Object { + "size": "", + }, + "fr-ca.js": Object { + "size": "", + }, + "fr-ch.js": Object { + "size": "", + }, + "fr.js": Object { + "size": "", + }, + "fy.js": Object { + "size": "", + }, + "ga.js": Object { + "size": "", + }, + "gd.js": Object { + "size": "", + }, + "gl.js": Object { + "size": "", + }, + "gom-deva.js": Object { + "size": "", + }, + "gom-latn.js": Object { + "size": "", + }, + "gu.js": Object { + "size": "", + }, + "he.js": Object { + "size": "", + }, + "hi.js": Object { + "size": "", + }, + "hr.js": Object { + "size": "", + }, + "hu.js": Object { + "size": "", + }, + "hy-am.js": Object { + "size": "", + }, + "id.js": Object { + "size": "", + }, + "is.js": Object { + "size": "", + }, + "it-ch.js": Object { + "size": "", + }, + "it.js": Object { + "size": "", + }, + "ja.js": Object { + "size": "", + }, + "jv.js": Object { + "size": "", + }, + "ka.js": Object { + "size": "", + }, + "kk.js": Object { + "size": "", + }, + "km.js": Object { + "size": "", + }, + "kn.js": Object { + "size": "", + }, + "ko.js": Object { + "size": "", + }, + "ku-kmr.js": Object { + "size": "", + }, + "ku.js": Object { + "size": "", + }, + "ky.js": Object { + "size": "", + }, + "lb.js": Object { + "size": "", + }, + "lo.js": Object { + "size": "", + }, + "lt.js": Object { + "size": "", + }, + "lv.js": Object { + "size": "", + }, + "me.js": Object { + "size": "", + }, + "mi.js": Object { + "size": "", + }, + "mk.js": Object { + "size": "", + }, + "ml.js": Object { + "size": "", + }, + "mn.js": Object { + "size": "", + }, + "mr.js": Object { + "size": "", + }, + "ms-my.js": Object { + "size": "", + }, + "ms.js": Object { + "size": "", + }, + "mt.js": Object { + "size": "", + }, + "my.js": Object { + "size": "", + }, + "nb.js": Object { + "size": "", + }, + "ne.js": Object { + "size": "", + }, + "nl-be.js": Object { + "size": "", + }, + "nl.js": Object { + "size": "", + }, + "nn.js": Object { + "size": "", + }, + "oc-lnc.js": Object { + "size": "", + }, + "pa-in.js": Object { + "size": "", + }, + "pl.js": Object { + "size": "", + }, + "pt-br.js": Object { + "size": "", + }, + "pt.js": Object { + "size": "", + }, + "ro.js": Object { + "size": "", + }, + "ru.js": Object { + "size": "", + }, + "sd.js": Object { + "size": "", + }, + "se.js": Object { + "size": "", + }, + "si.js": Object { + "size": "", + }, + "sk.js": Object { + "size": "", + }, + "sl.js": Object { + "size": "", + }, + "sq.js": Object { + "size": "", + }, + "sr-cyrl.js": Object { + "size": "", + }, + "sr.js": Object { + "size": "", + }, + "ss.js": Object { + "size": "", + }, + "sv.js": Object { + "size": "", + }, + "sw.js": Object { + "size": "", + }, + "ta.js": Object { + "size": "", + }, + "te.js": Object { + "size": "", + }, + "tet.js": Object { + "size": "", + }, + "tg.js": Object { + "size": "", + }, + "th.js": Object { + "size": "", + }, + "tk.js": Object { + "size": "", + }, + "tl-ph.js": Object { + "size": "", + }, + "tlh.js": Object { + "size": "", + }, + "tr.js": Object { + "size": "", + }, + "tzl.js": Object { + "size": "", + }, + "tzm-latn.js": Object { + "size": "", + }, + "tzm.js": Object { + "size": "", + }, + "ug-cn.js": Object { + "size": "", + }, + "uk.js": Object { + "size": "", + }, + "ur.js": Object { + "size": "", + }, + "uz-latn.js": Object { + "size": "", + }, + "uz.js": Object { + "size": "", + }, + "vi.js": Object { + "size": "", + }, + "x-pseudo.js": Object { + "size": "", + }, + "yo.js": Object { + "size": "", + }, + "zh-cn.js": Object { + "size": "", + }, + "zh-hk.js": Object { + "size": "", + }, + "zh-mo.js": Object { + "size": "", + }, + "zh-tw.js": Object { + "size": "", + }, + }, + }, + "min": Object { + "files": Object { + "locales.js": Object { + "size": "", + }, + "locales.min.js": Object { + "size": "", + }, + "locales.min.js.map": Object { + "size": "", + }, + "moment-with-locales.js": Object { + "size": "", + }, + "moment-with-locales.min.js": Object { + "size": "", + }, + "moment-with-locales.min.js.map": Object { + "size": "", + }, + "moment.min.js": Object { + "size": "", + }, + "moment.min.js.map": Object { + "size": "", + }, + }, + }, + "moment.js": Object { + "size": "", + }, + "package.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "src": Object { + "files": Object { + "lib": Object { + "files": Object { + "create": Object { + "files": Object { + "check-overflow.js": Object { + "size": "", + }, + "date-from-array.js": Object { + "size": "", + }, + "from-anything.js": Object { + "size": "", + }, + "from-array.js": Object { + "size": "", + }, + "from-object.js": Object { + "size": "", + }, + "from-string-and-array.js": Object { + "size": "", + }, + "from-string-and-format.js": Object { + "size": "", + }, + "from-string.js": Object { + "size": "", + }, + "local.js": Object { + "size": "", + }, + "parsing-flags.js": Object { + "size": "", + }, + "utc.js": Object { + "size": "", + }, + "valid.js": Object { + "size": "", + }, + }, + }, + "duration": Object { + "files": Object { + "abs.js": Object { + "size": "", + }, + "add-subtract.js": Object { + "size": "", + }, + "as.js": Object { + "size": "", + }, + "bubble.js": Object { + "size": "", + }, + "clone.js": Object { + "size": "", + }, + "constructor.js": Object { + "size": "", + }, + "create.js": Object { + "size": "", + }, + "duration.js": Object { + "size": "", + }, + "get.js": Object { + "size": "", + }, + "humanize.js": Object { + "size": "", + }, + "iso-string.js": Object { + "size": "", + }, + "prototype.js": Object { + "size": "", + }, + "valid.js": Object { + "size": "", + }, + }, + }, + "format": Object { + "files": Object { + "format.js": Object { + "size": "", + }, + }, + }, + "locale": Object { + "files": Object { + "base-config.js": Object { + "size": "", + }, + "calendar.js": Object { + "size": "", + }, + "constructor.js": Object { + "size": "", + }, + "en.js": Object { + "size": "", + }, + "formats.js": Object { + "size": "", + }, + "invalid.js": Object { + "size": "", + }, + "lists.js": Object { + "size": "", + }, + "locale.js": Object { + "size": "", + }, + "locales.js": Object { + "size": "", + }, + "ordinal.js": Object { + "size": "", + }, + "pre-post-format.js": Object { + "size": "", + }, + "prototype.js": Object { + "size": "", + }, + "relative.js": Object { + "size": "", + }, + "set.js": Object { + "size": "", + }, + }, + }, + "moment": Object { + "files": Object { + "add-subtract.js": Object { + "size": "", + }, + "calendar.js": Object { + "size": "", + }, + "clone.js": Object { + "size": "", + }, + "compare.js": Object { + "size": "", + }, + "constructor.js": Object { + "size": "", + }, + "creation-data.js": Object { + "size": "", + }, + "diff.js": Object { + "size": "", + }, + "format.js": Object { + "size": "", + }, + "from.js": Object { + "size": "", + }, + "get-set.js": Object { + "size": "", + }, + "locale.js": Object { + "size": "", + }, + "min-max.js": Object { + "size": "", + }, + "moment.js": Object { + "size": "", + }, + "now.js": Object { + "size": "", + }, + "prototype.js": Object { + "size": "", + }, + "start-end-of.js": Object { + "size": "", + }, + "to-type.js": Object { + "size": "", + }, + "to.js": Object { + "size": "", + }, + "valid.js": Object { + "size": "", + }, + }, + }, + "parse": Object { + "files": Object { + "regex.js": Object { + "size": "", + }, + "token.js": Object { + "size": "", + }, + }, + }, + "units": Object { + "files": Object { + "aliases.js": Object { + "size": "", + }, + "constants.js": Object { + "size": "", + }, + "day-of-month.js": Object { + "size": "", + }, + "day-of-week.js": Object { + "size": "", + }, + "day-of-year.js": Object { + "size": "", + }, + "era.js": Object { + "size": "", + }, + "hour.js": Object { + "size": "", + }, + "millisecond.js": Object { + "size": "", + }, + "minute.js": Object { + "size": "", + }, + "month.js": Object { + "size": "", + }, + "offset.js": Object { + "size": "", + }, + "priorities.js": Object { + "size": "", + }, + "quarter.js": Object { + "size": "", + }, + "second.js": Object { + "size": "", + }, + "timestamp.js": Object { + "size": "", + }, + "timezone.js": Object { + "size": "", + }, + "units.js": Object { + "size": "", + }, + "week-calendar-utils.js": Object { + "size": "", + }, + "week-year.js": Object { + "size": "", + }, + "week.js": Object { + "size": "", + }, + "year.js": Object { + "size": "", + }, + }, + }, + "utils": Object { + "files": Object { + "abs-ceil.js": Object { + "size": "", + }, + "abs-floor.js": Object { + "size": "", + }, + "abs-round.js": Object { + "size": "", + }, + "compare-arrays.js": Object { + "size": "", + }, + "defaults.js": Object { + "size": "", + }, + "deprecate.js": Object { + "size": "", + }, + "extend.js": Object { + "size": "", + }, + "has-own-prop.js": Object { + "size": "", + }, + "hooks.js": Object { + "size": "", + }, + "index-of.js": Object { + "size": "", + }, + "is-array.js": Object { + "size": "", + }, + "is-calendar-spec.js": Object { + "size": "", + }, + "is-date.js": Object { + "size": "", + }, + "is-function.js": Object { + "size": "", + }, + "is-leap-year.js": Object { + "size": "", + }, + "is-moment-input.js": Object { + "size": "", + }, + "is-number.js": Object { + "size": "", + }, + "is-object-empty.js": Object { + "size": "", + }, + "is-object.js": Object { + "size": "", + }, + "is-string.js": Object { + "size": "", + }, + "is-undefined.js": Object { + "size": "", + }, + "keys.js": Object { + "size": "", + }, + "map.js": Object { + "size": "", + }, + "mod.js": Object { + "size": "", + }, + "some.js": Object { + "size": "", + }, + "to-int.js": Object { + "size": "", + }, + "zero-fill.js": Object { + "size": "", + }, + }, + }, + }, + }, + "locale": Object { + "files": Object { + "af.js": Object { + "size": "", + }, + "ar-dz.js": Object { + "size": "", + }, + "ar-kw.js": Object { + "size": "", + }, + "ar-ly.js": Object { + "size": "", + }, + "ar-ma.js": Object { + "size": "", + }, + "ar-ps.js": Object { + "size": "", + }, + "ar-sa.js": Object { + "size": "", + }, + "ar-tn.js": Object { + "size": "", + }, + "ar.js": Object { + "size": "", + }, + "az.js": Object { + "size": "", + }, + "be.js": Object { + "size": "", + }, + "bg.js": Object { + "size": "", + }, + "bm.js": Object { + "size": "", + }, + "bn-bd.js": Object { + "size": "", + }, + "bn.js": Object { + "size": "", + }, + "bo.js": Object { + "size": "", + }, + "br.js": Object { + "size": "", + }, + "bs.js": Object { + "size": "", + }, + "ca.js": Object { + "size": "", + }, + "cs.js": Object { + "size": "", + }, + "cv.js": Object { + "size": "", + }, + "cy.js": Object { + "size": "", + }, + "da.js": Object { + "size": "", + }, + "de-at.js": Object { + "size": "", + }, + "de-ch.js": Object { + "size": "", + }, + "de.js": Object { + "size": "", + }, + "dv.js": Object { + "size": "", + }, + "el.js": Object { + "size": "", + }, + "en-au.js": Object { + "size": "", + }, + "en-ca.js": Object { + "size": "", + }, + "en-gb.js": Object { + "size": "", + }, + "en-ie.js": Object { + "size": "", + }, + "en-il.js": Object { + "size": "", + }, + "en-in.js": Object { + "size": "", + }, + "en-nz.js": Object { + "size": "", + }, + "en-sg.js": Object { + "size": "", + }, + "eo.js": Object { + "size": "", + }, + "es-do.js": Object { + "size": "", + }, + "es-mx.js": Object { + "size": "", + }, + "es-us.js": Object { + "size": "", + }, + "es.js": Object { + "size": "", + }, + "et.js": Object { + "size": "", + }, + "eu.js": Object { + "size": "", + }, + "fa.js": Object { + "size": "", + }, + "fi.js": Object { + "size": "", + }, + "fil.js": Object { + "size": "", + }, + "fo.js": Object { + "size": "", + }, + "fr-ca.js": Object { + "size": "", + }, + "fr-ch.js": Object { + "size": "", + }, + "fr.js": Object { + "size": "", + }, + "fy.js": Object { + "size": "", + }, + "ga.js": Object { + "size": "", + }, + "gd.js": Object { + "size": "", + }, + "gl.js": Object { + "size": "", + }, + "gom-deva.js": Object { + "size": "", + }, + "gom-latn.js": Object { + "size": "", + }, + "gu.js": Object { + "size": "", + }, + "he.js": Object { + "size": "", + }, + "hi.js": Object { + "size": "", + }, + "hr.js": Object { + "size": "", + }, + "hu.js": Object { + "size": "", + }, + "hy-am.js": Object { + "size": "", + }, + "id.js": Object { + "size": "", + }, + "is.js": Object { + "size": "", + }, + "it-ch.js": Object { + "size": "", + }, + "it.js": Object { + "size": "", + }, + "ja.js": Object { + "size": "", + }, + "jv.js": Object { + "size": "", + }, + "ka.js": Object { + "size": "", + }, + "kk.js": Object { + "size": "", + }, + "km.js": Object { + "size": "", + }, + "kn.js": Object { + "size": "", + }, + "ko.js": Object { + "size": "", + }, + "ku-kmr.js": Object { + "size": "", + }, + "ku.js": Object { + "size": "", + }, + "ky.js": Object { + "size": "", + }, + "lb.js": Object { + "size": "", + }, + "lo.js": Object { + "size": "", + }, + "lt.js": Object { + "size": "", + }, + "lv.js": Object { + "size": "", + }, + "me.js": Object { + "size": "", + }, + "mi.js": Object { + "size": "", + }, + "mk.js": Object { + "size": "", + }, + "ml.js": Object { + "size": "", + }, + "mn.js": Object { + "size": "", + }, + "mr.js": Object { + "size": "", + }, + "ms-my.js": Object { + "size": "", + }, + "ms.js": Object { + "size": "", + }, + "mt.js": Object { + "size": "", + }, + "my.js": Object { + "size": "", + }, + "nb.js": Object { + "size": "", + }, + "ne.js": Object { + "size": "", + }, + "nl-be.js": Object { + "size": "", + }, + "nl.js": Object { + "size": "", + }, + "nn.js": Object { + "size": "", + }, + "oc-lnc.js": Object { + "size": "", + }, + "pa-in.js": Object { + "size": "", + }, + "pl.js": Object { + "size": "", + }, + "pt-br.js": Object { + "size": "", + }, + "pt.js": Object { + "size": "", + }, + "ro.js": Object { + "size": "", + }, + "ru.js": Object { + "size": "", + }, + "sd.js": Object { + "size": "", + }, + "se.js": Object { + "size": "", + }, + "si.js": Object { + "size": "", + }, + "sk.js": Object { + "size": "", + }, + "sl.js": Object { + "size": "", + }, + "sq.js": Object { + "size": "", + }, + "sr-cyrl.js": Object { + "size": "", + }, + "sr.js": Object { + "size": "", + }, + "ss.js": Object { + "size": "", + }, + "sv.js": Object { + "size": "", + }, + "sw.js": Object { + "size": "", + }, + "ta.js": Object { + "size": "", + }, + "te.js": Object { + "size": "", + }, + "tet.js": Object { + "size": "", + }, + "tg.js": Object { + "size": "", + }, + "th.js": Object { + "size": "", + }, + "tk.js": Object { + "size": "", + }, + "tl-ph.js": Object { + "size": "", + }, + "tlh.js": Object { + "size": "", + }, + "tr.js": Object { + "size": "", + }, + "tzl.js": Object { + "size": "", + }, + "tzm-latn.js": Object { + "size": "", + }, + "tzm.js": Object { + "size": "", + }, + "ug-cn.js": Object { + "size": "", + }, + "uk.js": Object { + "size": "", + }, + "ur.js": Object { + "size": "", + }, + "uz-latn.js": Object { + "size": "", + }, + "uz.js": Object { + "size": "", + }, + "vi.js": Object { + "size": "", + }, + "x-pseudo.js": Object { + "size": "", + }, + "yo.js": Object { + "size": "", + }, + "zh-cn.js": Object { + "size": "", + }, + "zh-hk.js": Object { + "size": "", + }, + "zh-mo.js": Object { + "size": "", + }, + "zh-tw.js": Object { + "size": "", + }, + }, + }, + "moment.js": Object { + "size": "", + }, + }, + }, + }, + }, + "ms": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + "license.md": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + }, + }, + "node-fetch": Object { + "files": Object { + "ERROR-HANDLING.md": Object { + "size": "", + }, + "LICENSE.md": Object { + "size": "", + }, + "LIMITS.md": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "lib": Object { + "files": Object { + "body.js": Object { + "size": "", + }, + "fetch-error.js": Object { + "size": "", + }, + "headers.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "request.js": Object { + "size": "", + }, + "response.js": Object { + "size": "", + }, + }, + }, + "package.json": Object { + "size": "", + }, + }, + }, + "object-assign": Object { + "files": Object { + "index.js": Object { + "size": "", + }, + "license": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + }, + }, + "promise": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "build.js": Object { + "size": "", + }, + "core.js": Object { + "size": "", + }, + "domains": Object { + "files": Object { + "core.js": Object { + "size": "", + }, + "done.js": Object { + "size": "", + }, + "es6-extensions.js": Object { + "size": "", + }, + "finally.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "node-extensions.js": Object { + "size": "", + }, + "rejection-tracking.js": Object { + "size": "", + }, + "synchronous.js": Object { + "size": "", + }, + }, + }, + "index.js": Object { + "size": "", + }, + "lib": Object { + "files": Object { + "core.js": Object { + "size": "", + }, + "done.js": Object { + "size": "", + }, + "es6-extensions.js": Object { + "size": "", + }, + "finally.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "node-extensions.js": Object { + "size": "", + }, + "rejection-tracking.js": Object { + "size": "", + }, + "synchronous.js": Object { + "size": "", + }, + }, + }, + "package.json": Object { + "size": "", + }, + "polyfill-done.js": Object { + "size": "", + }, + "polyfill.js": Object { + "size": "", + }, + "setimmediate": Object { + "files": Object { + "core.js": Object { + "size": "", + }, + "done.js": Object { + "size": "", + }, + "es6-extensions.js": Object { + "size": "", + }, + "finally.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "node-extensions.js": Object { + "size": "", + }, + "rejection-tracking.js": Object { + "size": "", + }, + "synchronous.js": Object { + "size": "", + }, + }, + }, + "src": Object { + "files": Object { + "core.js": Object { + "size": "", + }, + "done.js": Object { + "size": "", + }, + "es6-extensions.js": Object { + "size": "", + }, + "finally.js": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "node-extensions.js": Object { + "size": "", + }, + "rejection-tracking.js": Object { + "size": "", + }, + "synchronous.js": Object { + "size": "", + }, + }, + }, + }, + }, + "rc-datepicker": Object { + "files": Object { + ".drone.yml": Object { + "size": "", + }, + "LICENSE": Object { + "size": "", + }, + "index.js": Object { + "size": "", + }, + "lib": Object { + "files": Object { + "DatePicker.js": Object { + "size": "", + }, + "DatePickerInput.js": Object { + "size": "", + }, + "InvalidDate.js": Object { + "size": "", + }, + "Picker.js": Object { + "size": "", + }, + "PickerTop.js": Object { + "size": "", + }, + "Row.js": Object { + "size": "", + }, + "daypicker": Object { + "files": Object { + "DayPicker.js": Object { + "size": "", + }, + "DayPickerBody.js": Object { + "size": "", + }, + "DayPickerTop.js": Object { + "size": "", + }, + }, + }, + "index.js": Object { + "size": "", + }, + "monthpicker": Object { + "files": Object { + "MonthPicker.js": Object { + "size": "", + }, + "MonthPickerBody.js": Object { + "size": "", + }, + "MonthPickerTop.js": Object { + "size": "", + }, + }, + }, + "style.css": Object { + "size": "", + }, + "utils": Object { + "files": Object { + "DateUtils.js": Object { + "size": "", + }, + "ValueLinkMixin.js": Object { + "size": "", + }, + "formatMixin.js": Object { + "size": "", + }, + }, + }, + "yearpicker": Object { + "files": Object { + "YearPicker.js": Object { + "size": "", + }, + "YearPickerBody.js": Object { + "size": "", + }, + "YearPickerTop.js": Object { + "size": "", + }, + }, + }, + }, + }, + "package.json": Object { + "size": "", + }, + "src": Object { + "files": Object { + "DatePicker.js": Object { + "size": "", + }, + "DatePickerInput.js": Object { + "size": "", + }, + "InvalidDate.js": Object { + "size": "", + }, + "Picker.js": Object { + "size": "", + }, + "PickerTop.js": Object { + "size": "", + }, + "Row.js": Object { + "size": "", + }, + "daypicker": Object { + "files": Object { + "DayPicker.js": Object { + "size": "", + }, + "DayPickerBody.js": Object { + "size": "", + }, + "DayPickerTop.js": Object { + "size": "", + }, + }, + }, + "index.js": Object { + "size": "", + }, + "monthpicker": Object { + "files": Object { + "MonthPicker.js": Object { + "size": "", + }, + "MonthPickerBody.js": Object { + "size": "", + }, + "MonthPickerTop.js": Object { + "size": "", + }, + }, + }, + "style.scss": Object { + "size": "", + }, + "utils": Object { + "files": Object { + "DateUtils.js": Object { + "size": "", + }, + "ValueLinkMixin.js": Object { + "size": "", + }, + "formatMixin.js": Object { + "size": "", + }, + }, + }, + "yearpicker": Object { + "files": Object { + "YearPicker.js": Object { + "size": "", + }, + "YearPickerBody.js": Object { + "size": "", + }, + "YearPickerTop.js": Object { + "size": "", + }, + }, + }, + }, + }, + }, + }, + "react": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "PATENTS": Object { + "size": "", + }, + "dist": Object { + "files": Object { + "react-with-addons.js": Object { + "size": "", + }, + "react-with-addons.min.js": Object { + "size": "", + }, + "react.js": Object { + "size": "", + }, + "react.min.js": Object { + "size": "", + }, + }, + }, + "lib": Object { + "files": Object { + "AutoFocusUtils.js": Object { + "size": "", + }, + "BeforeInputEventPlugin.js": Object { + "size": "", + }, + "CSSProperty.js": Object { + "size": "", + }, + "CSSPropertyOperations.js": Object { + "size": "", + }, + "CallbackQueue.js": Object { + "size": "", + }, + "ChangeEventPlugin.js": Object { + "size": "", + }, + "DOMChildrenOperations.js": Object { + "size": "", + }, + "DOMLazyTree.js": Object { + "size": "", + }, + "DOMNamespaces.js": Object { + "size": "", + }, + "DOMProperty.js": Object { + "size": "", + }, + "DOMPropertyOperations.js": Object { + "size": "", + }, + "Danger.js": Object { + "size": "", + }, + "DefaultEventPluginOrder.js": Object { + "size": "", + }, + "DisabledInputUtils.js": Object { + "size": "", + }, + "EnterLeaveEventPlugin.js": Object { + "size": "", + }, + "EventConstants.js": Object { + "size": "", + }, + "EventPluginHub.js": Object { + "size": "", + }, + "EventPluginRegistry.js": Object { + "size": "", + }, + "EventPluginUtils.js": Object { + "size": "", + }, + "EventPropagators.js": Object { + "size": "", + }, + "FallbackCompositionState.js": Object { + "size": "", + }, + "HTMLDOMPropertyConfig.js": Object { + "size": "", + }, + "KeyEscapeUtils.js": Object { + "size": "", + }, + "LinkedStateMixin.js": Object { + "size": "", + }, + "LinkedValueUtils.js": Object { + "size": "", + }, + "NativeMethodsMixin.js": Object { + "size": "", + }, + "PooledClass.js": Object { + "size": "", + }, + "React.js": Object { + "size": "", + }, + "ReactBrowserEventEmitter.js": Object { + "size": "", + }, + "ReactCSSTransitionGroup.js": Object { + "size": "", + }, + "ReactCSSTransitionGroupChild.js": Object { + "size": "", + }, + "ReactChildReconciler.js": Object { + "size": "", + }, + "ReactChildren.js": Object { + "size": "", + }, + "ReactClass.js": Object { + "size": "", + }, + "ReactComponent.js": Object { + "size": "", + }, + "ReactComponentBrowserEnvironment.js": Object { + "size": "", + }, + "ReactComponentEnvironment.js": Object { + "size": "", + }, + "ReactComponentTreeDevtool.js": Object { + "size": "", + }, + "ReactComponentTreeTestUtils.js": Object { + "size": "", + }, + "ReactComponentWithPureRenderMixin.js": Object { + "size": "", + }, + "ReactCompositeComponent.js": Object { + "size": "", + }, + "ReactCurrentOwner.js": Object { + "size": "", + }, + "ReactDOM.js": Object { + "size": "", + }, + "ReactDOMButton.js": Object { + "size": "", + }, + "ReactDOMComponent.js": Object { + "size": "", + }, + "ReactDOMComponentFlags.js": Object { + "size": "", + }, + "ReactDOMComponentTree.js": Object { + "size": "", + }, + "ReactDOMContainerInfo.js": Object { + "size": "", + }, + "ReactDOMDebugTool.js": Object { + "size": "", + }, + "ReactDOMEmptyComponent.js": Object { + "size": "", + }, + "ReactDOMFactories.js": Object { + "size": "", + }, + "ReactDOMFeatureFlags.js": Object { + "size": "", + }, + "ReactDOMFiber.js": Object { + "size": "", + }, + "ReactDOMIDOperations.js": Object { + "size": "", + }, + "ReactDOMInput.js": Object { + "size": "", + }, + "ReactDOMInstrumentation.js": Object { + "size": "", + }, + "ReactDOMNullInputValuePropDevtool.js": Object { + "size": "", + }, + "ReactDOMOption.js": Object { + "size": "", + }, + "ReactDOMSelect.js": Object { + "size": "", + }, + "ReactDOMSelection.js": Object { + "size": "", + }, + "ReactDOMServer.js": Object { + "size": "", + }, + "ReactDOMTextComponent.js": Object { + "size": "", + }, + "ReactDOMTextarea.js": Object { + "size": "", + }, + "ReactDOMTreeTraversal.js": Object { + "size": "", + }, + "ReactDOMUnknownPropertyDevtool.js": Object { + "size": "", + }, + "ReactDebugTool.js": Object { + "size": "", + }, + "ReactDefaultBatchingStrategy.js": Object { + "size": "", + }, + "ReactDefaultInjection.js": Object { + "size": "", + }, + "ReactElement.js": Object { + "size": "", + }, + "ReactElementValidator.js": Object { + "size": "", + }, + "ReactEmptyComponent.js": Object { + "size": "", + }, + "ReactErrorUtils.js": Object { + "size": "", + }, + "ReactEventEmitterMixin.js": Object { + "size": "", + }, + "ReactEventListener.js": Object { + "size": "", + }, + "ReactFeatureFlags.js": Object { + "size": "", + }, + "ReactFragment.js": Object { + "size": "", + }, + "ReactHostComponent.js": Object { + "size": "", + }, + "ReactHostOperationHistoryDevtool.js": Object { + "size": "", + }, + "ReactInjection.js": Object { + "size": "", + }, + "ReactInputSelection.js": Object { + "size": "", + }, + "ReactInstanceHandles.js": Object { + "size": "", + }, + "ReactInstanceMap.js": Object { + "size": "", + }, + "ReactInstrumentation.js": Object { + "size": "", + }, + "ReactInvalidSetStateWarningDevTool.js": Object { + "size": "", + }, + "ReactLink.js": Object { + "size": "", + }, + "ReactMarkupChecksum.js": Object { + "size": "", + }, + "ReactMount.js": Object { + "size": "", + }, + "ReactMultiChild.js": Object { + "size": "", + }, + "ReactMultiChildUpdateTypes.js": Object { + "size": "", + }, + "ReactNative.js": Object { + "size": "", + }, + "ReactNativeAttributePayload.js": Object { + "size": "", + }, + "ReactNativeBaseComponent.js": Object { + "size": "", + }, + "ReactNativeBridgeEventPlugin.js": Object { + "size": "", + }, + "ReactNativeComponentEnvironment.js": Object { + "size": "", + }, + "ReactNativeComponentTree.js": Object { + "size": "", + }, + "ReactNativeContainerInfo.js": Object { + "size": "", + }, + "ReactNativeDOMIDOperations.js": Object { + "size": "", + }, + "ReactNativeDefaultInjection.js": Object { + "size": "", + }, + "ReactNativeEventEmitter.js": Object { + "size": "", + }, + "ReactNativeEventPluginOrder.js": Object { + "size": "", + }, + "ReactNativeGlobalResponderHandler.js": Object { + "size": "", + }, + "ReactNativeMount.js": Object { + "size": "", + }, + "ReactNativePropRegistry.js": Object { + "size": "", + }, + "ReactNativeReconcileTransaction.js": Object { + "size": "", + }, + "ReactNativeTagHandles.js": Object { + "size": "", + }, + "ReactNativeTextComponent.js": Object { + "size": "", + }, + "ReactNativeTreeTraversal.js": Object { + "size": "", + }, + "ReactNodeTypes.js": Object { + "size": "", + }, + "ReactNoop.js": Object { + "size": "", + }, + "ReactNoopUpdateQueue.js": Object { + "size": "", + }, + "ReactOwner.js": Object { + "size": "", + }, + "ReactPerf.js": Object { + "size": "", + }, + "ReactPropTypeLocationNames.js": Object { + "size": "", + }, + "ReactPropTypeLocations.js": Object { + "size": "", + }, + "ReactPropTypes.js": Object { + "size": "", + }, + "ReactReconcileTransaction.js": Object { + "size": "", + }, + "ReactReconciler.js": Object { + "size": "", + }, + "ReactRef.js": Object { + "size": "", + }, + "ReactServerBatchingStrategy.js": Object { + "size": "", + }, + "ReactServerRendering.js": Object { + "size": "", + }, + "ReactServerRenderingTransaction.js": Object { + "size": "", + }, + "ReactServerUpdateQueue.js": Object { + "size": "", + }, + "ReactSimpleEmptyComponent.js": Object { + "size": "", + }, + "ReactStateSetters.js": Object { + "size": "", + }, + "ReactTestMount.js": Object { + "size": "", + }, + "ReactTestReconcileTransaction.js": Object { + "size": "", + }, + "ReactTestRenderer.js": Object { + "size": "", + }, + "ReactTestUtils.js": Object { + "size": "", + }, + "ReactTransitionChildMapping.js": Object { + "size": "", + }, + "ReactTransitionEvents.js": Object { + "size": "", + }, + "ReactTransitionGroup.js": Object { + "size": "", + }, + "ReactUMDEntry.js": Object { + "size": "", + }, + "ReactUpdateQueue.js": Object { + "size": "", + }, + "ReactUpdates.js": Object { + "size": "", + }, + "ReactVersion.js": Object { + "size": "", + }, + "ReactWithAddons.js": Object { + "size": "", + }, + "ReactWithAddonsUMDEntry.js": Object { + "size": "", + }, + "ResponderEventPlugin.js": Object { + "size": "", + }, + "ResponderSyntheticEvent.js": Object { + "size": "", + }, + "ResponderTouchHistoryStore.js": Object { + "size": "", + }, + "SVGDOMPropertyConfig.js": Object { + "size": "", + }, + "SelectEventPlugin.js": Object { + "size": "", + }, + "SimpleEventPlugin.js": Object { + "size": "", + }, + "SyntheticAnimationEvent.js": Object { + "size": "", + }, + "SyntheticClipboardEvent.js": Object { + "size": "", + }, + "SyntheticCompositionEvent.js": Object { + "size": "", + }, + "SyntheticDragEvent.js": Object { + "size": "", + }, + "SyntheticEvent.js": Object { + "size": "", + }, + "SyntheticFocusEvent.js": Object { + "size": "", + }, + "SyntheticInputEvent.js": Object { + "size": "", + }, + "SyntheticKeyboardEvent.js": Object { + "size": "", + }, + "SyntheticMouseEvent.js": Object { + "size": "", + }, + "SyntheticTouchEvent.js": Object { + "size": "", + }, + "SyntheticTransitionEvent.js": Object { + "size": "", + }, + "SyntheticUIEvent.js": Object { + "size": "", + }, + "SyntheticWheelEvent.js": Object { + "size": "", + }, + "TapEventPlugin.js": Object { + "size": "", + }, + "TouchHistoryMath.js": Object { + "size": "", + }, + "Transaction.js": Object { + "size": "", + }, + "ViewportMetrics.js": Object { + "size": "", + }, + "accumulate.js": Object { + "size": "", + }, + "accumulateInto.js": Object { + "size": "", + }, + "adler32.js": Object { + "size": "", + }, + "canDefineProperty.js": Object { + "size": "", + }, + "checkReactTypeSpec.js": Object { + "size": "", + }, + "createHierarchyRenderer.js": Object { + "size": "", + }, + "createMicrosoftUnsafeLocalFunction.js": Object { + "size": "", + }, + "createReactNativeComponentClass.js": Object { + "size": "", + }, + "dangerousStyleValue.js": Object { + "size": "", + }, + "deprecated.js": Object { + "size": "", + }, + "escapeTextContentForBrowser.js": Object { + "size": "", + }, + "findDOMNode.js": Object { + "size": "", + }, + "findNodeHandle.js": Object { + "size": "", + }, + "flattenChildren.js": Object { + "size": "", + }, + "forEachAccumulated.js": Object { + "size": "", + }, + "getEventCharCode.js": Object { + "size": "", + }, + "getEventKey.js": Object { + "size": "", + }, + "getEventModifierState.js": Object { + "size": "", + }, + "getEventTarget.js": Object { + "size": "", + }, + "getHostComponentFromComposite.js": Object { + "size": "", + }, + "getIteratorFn.js": Object { + "size": "", + }, + "getNodeForCharacterOffset.js": Object { + "size": "", + }, + "getTestDocument.js": Object { + "size": "", + }, + "getTextContentAccessor.js": Object { + "size": "", + }, + "getVendorPrefixedEventName.js": Object { + "size": "", + }, + "instantiateReactComponent.js": Object { + "size": "", + }, + "isEventSupported.js": Object { + "size": "", + }, + "isTextInputElement.js": Object { + "size": "", + }, + "onlyChild.js": Object { + "size": "", + }, + "quoteAttributeValueForBrowser.js": Object { + "size": "", + }, + "reactComponentExpect.js": Object { + "size": "", + }, + "reactProdInvariant.js": Object { + "size": "", + }, + "renderSubtreeIntoContainer.js": Object { + "size": "", + }, + "setInnerHTML.js": Object { + "size": "", + }, + "setTextContent.js": Object { + "size": "", + }, + "shallowCompare.js": Object { + "size": "", + }, + "shouldUpdateReactComponent.js": Object { + "size": "", + }, + "sliceChildren.js": Object { + "size": "", + }, + "traverseAllChildren.js": Object { + "size": "", + }, + "update.js": Object { + "size": "", + }, + "validateDOMNesting.js": Object { + "size": "", + }, + }, + }, + "package.json": Object { + "size": "", + }, + "react.js": Object { + "size": "", + }, + }, + }, + "react-dom": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "PATENTS": Object { + "size": "", + }, + "dist": Object { + "files": Object { + "react-dom-server.js": Object { + "size": "", + }, + "react-dom-server.min.js": Object { + "size": "", + }, + "react-dom.js": Object { + "size": "", + }, + "react-dom.min.js": Object { + "size": "", + }, + }, + }, + "index.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "package.json.rej": Object { + "size": "", + }, + "server.js": Object { + "size": "", + }, + }, + }, + "safer-buffer": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "Porting-Buffer.md": Object { + "size": "", + }, + "dangerous.js": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "safer.js": Object { + "size": "", + }, + "tests.js": Object { + "size": "", + }, + }, + }, + "setimmediate": Object { + "files": Object { + "LICENSE.txt": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "setImmediate.js": Object { + "size": "", + }, + }, + }, + "ua-parser-js": Object { + "files": Object { + "dist": Object { + "files": Object { + "ua-parser.html": Object { + "size": "", + }, + "ua-parser.min.js": Object { + "size": "", + }, + "ua-parser.pack.js": Object { + "size": "", + }, + }, + }, + "license.md": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + "script": Object { + "files": Object { + "cli.js": Object { + "executable": true, + "size": "", + }, + }, + }, + "src": Object { + "files": Object { + "ua-parser.js": Object { + "executable": true, + "size": "", + }, + }, + }, + }, + }, + "whatwg-fetch": Object { + "files": Object { + "LICENSE": Object { + "size": "", + }, + "dist": Object { + "files": Object { + "fetch.umd.js": Object { + "size": "", + }, + "fetch.umd.js.flow": Object { + "size": "", + }, + }, + }, + "fetch.js": Object { + "size": "", + }, + "fetch.js.flow": Object { + "size": "", + }, + "package.json": Object { + "size": "", + }, + }, + }, + }, + }, + "package.json": Object { + "size": "", + }, + }, +} +`; + +exports[`failed peer dep 3`] = ` +Array [ + "app.asar", +] +`; + exports[`ignore node_modules 1`] = ` Object { "linux": Array [], diff --git a/test/src/globTest.ts b/test/src/globTest.ts index d391dfc7a06..10cbb04f5f0 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -5,6 +5,7 @@ import * as path from "path" import * as fs from "fs/promises" import { assertThat } from "./helpers/fileAssert" import { app, assertPack, modifyPackageJson, PackedContext, removeUnstableProperties, verifyAsarFileTree } from "./helpers/packTester" +import { verifySmartUnpack } from "./helpers/verifySmartUnpack" async function createFiles(appDir: string) { await Promise.all([ @@ -123,6 +124,37 @@ test.ifNotWindows( ) ) +// cannot be enabled +// https://github.com/electron-userland/electron-builder/issues/611 +test.ifDevOrLinuxCi("failed peer dep", () => { + return assertPack( + "test-app-one", + { + targets: Platform.LINUX.createTarget(DIR_TARGET), + }, + { + isInstallDepsBefore: true, + projectDirCreated: projectDir => { + return Promise.all([ + modifyPackageJson(projectDir, data => { + //noinspection SpellCheckingInspection + data.dependencies = { + debug: "4.1.1", + "rc-datepicker": "4.0.0", + react: "15.2.1", + "react-dom": "15.2.1", + } + }), + outputFile(path.join(projectDir, "yarn.lock"), "data"), + ]) + }, + packed: context => { + return verifySmartUnpack(context.getResources(Platform.LINUX)) + }, + } + ) +}) + test.ifAll.ifDevOrLinuxCi("ignore node_modules", () => { return assertPack( "test-app-one", From 87157433738562637cf0663074ec513ff854ce80 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:24:23 +0800 Subject: [PATCH 57/85] fix ut --- test/src/globTest.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 10cbb04f5f0..3c2010a66f5 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -131,6 +131,9 @@ test.ifDevOrLinuxCi("failed peer dep", () => { "test-app-one", { targets: Platform.LINUX.createTarget(DIR_TARGET), + config: { + files: ["!pnpm-lock.yaml"], + }, }, { isInstallDepsBefore: true, @@ -145,7 +148,7 @@ test.ifDevOrLinuxCi("failed peer dep", () => { "react-dom": "15.2.1", } }), - outputFile(path.join(projectDir, "yarn.lock"), "data"), + outputFile(path.join(projectDir, "pnpm-lock.yaml"), ""), ]) }, packed: context => { From 94af9fb76347facecf93e18197a2e450e440fc8c Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:27:17 +0800 Subject: [PATCH 58/85] format code --- test/src/globTest.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 3c2010a66f5..c02b6f5d4fe 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -132,8 +132,8 @@ test.ifDevOrLinuxCi("failed peer dep", () => { { targets: Platform.LINUX.createTarget(DIR_TARGET), config: { - files: ["!pnpm-lock.yaml"], - }, + files: ["!pnpm-lock.yaml"], + }, }, { isInstallDepsBefore: true, From aca36e1f0dd84e2e5af1d0d13647d5ee43d2f8df Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:27:49 +0800 Subject: [PATCH 59/85] format code --- test/src/globTest.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index c02b6f5d4fe..38144678c13 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -140,13 +140,13 @@ test.ifDevOrLinuxCi("failed peer dep", () => { projectDirCreated: projectDir => { return Promise.all([ modifyPackageJson(projectDir, data => { - //noinspection SpellCheckingInspection - data.dependencies = { - debug: "4.1.1", - "rc-datepicker": "4.0.0", - react: "15.2.1", - "react-dom": "15.2.1", - } + //noinspection SpellCheckingInspection + data.dependencies = { + debug: "4.1.1", + "rc-datepicker": "4.0.0", + react: "15.2.1", + "react-dom": "15.2.1", + } }), outputFile(path.join(projectDir, "pnpm-lock.yaml"), ""), ]) From ce2dfb5ba4fa279cbd1327ab4ed4ae8f261a6afd Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:29:05 +0800 Subject: [PATCH 60/85] update ignore --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index dc585c7e099..00536b5579d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ /.vscode/ node_modules - *.log /.idea/compiler.xml @@ -28,4 +27,4 @@ electron-builder-*.d.ts tsconfig.tsbuildinfo .pnpm-store/ -**/node_modules \ No newline at end of file +**/node_modules From b2b72bfd7a0ef5d1c553f129b19e32bf3ba3ffa5 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:30:04 +0800 Subject: [PATCH 61/85] update ignore --- test/fixtures/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/.gitignore b/test/fixtures/.gitignore index ddf342489be..9bfb325f109 100644 --- a/test/fixtures/.gitignore +++ b/test/fixtures/.gitignore @@ -1 +1 @@ -!node_modules/ +!node_modules/ \ No newline at end of file From 38ba98408256e6be453746020c7d59543c86c80a Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:33:23 +0800 Subject: [PATCH 62/85] update yarn.lock --- .../test-app-two-native-modules/yarn.lock | 1002 ++++++++--------- 1 file changed, 486 insertions(+), 516 deletions(-) diff --git a/test/fixtures/test-app-two-native-modules/yarn.lock b/test/fixtures/test-app-two-native-modules/yarn.lock index bd5fcbebd26..5aff61f57d4 100644 --- a/test/fixtures/test-app-two-native-modules/yarn.lock +++ b/test/fixtures/test-app-two-native-modules/yarn.lock @@ -1,516 +1,486 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@electron/get@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960" - integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== - dependencies: - debug "^4.1.1" - env-paths "^2.2.0" - fs-extra "^8.1.0" - got "^11.8.5" - progress "^2.0.3" - semver "^6.2.0" - sumchecker "^3.0.1" - optionalDependencies: - global-agent "^3.0.0" - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/http-cache-semantics@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "22.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.4.tgz#e35d6f48dca3255ce44256ddc05dee1c23353fcc" - integrity sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg== - dependencies: - undici-types "~6.19.2" - -"@types/node@^16.11.26": - version "16.18.112" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.112.tgz#efd468e4edd08404eed23b6aed6c2f35edfa9450" - integrity sha512-EKrbKUGJROm17+dY/gMi31aJlGLJ75e1IkTojt9n6u+hnaTBDs+M1bIdOawpk2m6YUAXq/R2W0SxCng1tndHCg== - -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -"@types/yauzl@^2.9.1": - version "2.10.3" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" - integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== - dependencies: - "@types/node" "*" - -boolean@^3.0.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" - integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -debug@^4.1.0, debug@^4.1.1: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.0.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -electron@23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/electron/-/electron-23.2.0.tgz#1c60fec08206e24830f3a8dca2772454c8bc25ba" - integrity sha512-De9e21cri0QYct/w6tTNOnKyCt9RVKUw5F8PEN4FPzGR9tr6IT53uyt42uH754uJWrZeLMCAdoXy6/0GmMmYZA== - dependencies: - "@electron/get" "^2.0.0" - "@types/node" "^16.11.26" - extract-zip "^2.0.1" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es6-error@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -global-agent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" - integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== - dependencies: - boolean "^3.0.1" - es6-error "^4.1.1" - matcher "^3.0.0" - roarr "^2.15.3" - semver "^7.3.2" - serialize-error "^7.0.1" - -globalthis@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-property-descriptors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.0.0: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -matcher@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" - integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== - dependencies: - escape-string-regexp "^4.0.0" - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -pump@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -roarr@^2.15.3: - version "2.15.4" - resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" - integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== - dependencies: - boolean "^3.0.1" - detect-node "^2.0.4" - globalthis "^1.0.1" - json-stringify-safe "^5.0.1" - semver-compare "^1.0.0" - sprintf-js "^1.1.2" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== - -semver@^6.2.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -sprintf-js@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sumchecker@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" - integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== - dependencies: - debug "^4.1.0" - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@electron/get@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" + integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "18.15.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + +"@types/node@^16.11.26": + version "16.18.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.22.tgz#a6505a5da1387aae03fddfb93591118f27b4c0ea" + integrity sha512-LJSIirgASa1LicFGTUFwDY7BfKDtLIbijqDLkH47LxEo/jtdrtiZ4/kLPD99bEQhTcPcuh6KhDllHqRxygJD2w== + +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-properties@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +electron@23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-23.2.0.tgz#1c60fec08206e24830f3a8dca2772454c8bc25ba" + integrity sha512-De9e21cri0QYct/w6tTNOnKyCt9RVKUw5F8PEN4FPzGR9tr6IT53uyt42uH754uJWrZeLMCAdoXy6/0GmMmYZA== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^16.11.26" + extract-zip "^2.0.1" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +globalthis@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^4.0.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" From d6377ffe6b861607d8c6e8780effe1147c1cf934 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:36:55 +0800 Subject: [PATCH 63/85] update yarn.lock --- .../node_modules/.yarn-integrity | 12 +++++-- .../test-app-yarn-several-workspace/yarn.lock | 33 +++++++++---------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity b/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity index b7f79f14b0f..d4af20d9ae5 100644 --- a/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity +++ b/test/fixtures/test-app-yarn-several-workspace/node_modules/.yarn-integrity @@ -1,12 +1,20 @@ { - "systemParams": "linux-x64-127", "modulesFolders": [ "node_modules", "node_modules", "packages/test-app/node_modules" ], "flags": [], - "linkedModules": [], + "linkedModules": [ + "dmd", + "dmd-tf", + "docdash", + "electron-auto-updater", + "electron-download-tf", + "electron-vue-scripts", + "electron-webpack", + "jest-cli" + ], "topLevelPatterns": [ "electron-log@2.2.8", "electron-log@2.2.9", diff --git a/test/fixtures/test-app-yarn-several-workspace/yarn.lock b/test/fixtures/test-app-yarn-several-workspace/yarn.lock index bebfa96286f..7732df68af9 100644 --- a/test/fixtures/test-app-yarn-several-workspace/yarn.lock +++ b/test/fixtures/test-app-yarn-several-workspace/yarn.lock @@ -1,18 +1,15 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -electron-log@2.2.8: - version "2.2.8" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.8.tgz#2296cccd8da046268a199c1a302dcb8cb16f2b72" - integrity sha512-jYdSZLKo2IcAW7q4MmdzSdFfxZwGUv0UH4IK9ueeY0jdLqP3zyia7JwVpoYzsmx0vPQI1Mj6PaaflAuZC4p75w== - -electron-log@2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" - integrity sha512-WNMSipQYurNxY14RO6IKgcxcZg1e4aNVpUUJK9q7Bqe0TZEKn1e5h4HiQKhTgVLqKrUn++ugOZrty450P9vpjA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +electron-log@2.2.8: + version "2.2.8" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.8.tgz#2296cccd8da046268a199c1a302dcb8cb16f2b72" + +electron-log@2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" From 4d42331b439e2046935dcfc1e7357ec1ea4ef480 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:39:39 +0800 Subject: [PATCH 64/85] update yarn.lock --- .../node_modules/.yarn-integrity | 8 +++- .../packages/test-app/package.json | 3 ++ .../test-app-yarn-workspace/yarn.lock | 37 +++++++++---------- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity b/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity index eca5009180a..77763fc1a14 100644 --- a/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity +++ b/test/fixtures/test-app-yarn-workspace/node_modules/.yarn-integrity @@ -1,11 +1,15 @@ { - "systemParams": "linux-x64-127", + "systemParams": "darwin-x64-64", "modulesFolders": [ "node_modules", "node_modules" ], "flags": [], - "linkedModules": [], + "linkedModules": [ + "docdash", + "electron-download-tf", + "electron-webpack" + ], "topLevelPatterns": [ "@sentry/core@0.5.4", "electron-log@2.2.9", diff --git a/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json b/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json index 82f146450f6..10f4eebbe46 100644 --- a/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json +++ b/test/fixtures/test-app-yarn-workspace/packages/test-app/package.json @@ -21,5 +21,8 @@ "dependencies": { "electron-log": "2.2.9", "@sentry/core": "0.5.4" + }, + "optionalDependencies": { + "unresolved": "^2.0.5" } } diff --git a/test/fixtures/test-app-yarn-workspace/yarn.lock b/test/fixtures/test-app-yarn-workspace/yarn.lock index fb7039fbde8..adac830142b 100644 --- a/test/fixtures/test-app-yarn-workspace/yarn.lock +++ b/test/fixtures/test-app-yarn-workspace/yarn.lock @@ -1,20 +1,17 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@sentry/core@0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-0.5.4.tgz#9b0a842b442131b3801bae70be2ca4e9c510574e" - integrity sha512-2OPFVkgpv0HmYnUTmgF6IxLvslqn7fYCEBWRn/Owa5ICx2+peWQ8D5VQSTpgYsRwC2HQLEndhz+TwvkrnB2SKA== - dependencies: - "@sentry/shim" "0.5.4" - -"@sentry/shim@0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@sentry/shim/-/shim-0.5.4.tgz#cb826b1a34765ae5e1b21e61df2def2f8da91dc1" - integrity sha512-UoExifJnbmTiUgc1ClH34/UvPxp68wT1OQBuAUTm/hVdhNyp81TjsrxnJenq5YDTAVEzgjjREi0aiA7Hl946mg== - -electron-log@2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" - integrity sha512-WNMSipQYurNxY14RO6IKgcxcZg1e4aNVpUUJK9q7Bqe0TZEKn1e5h4HiQKhTgVLqKrUn++ugOZrty450P9vpjA== +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@sentry/core@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-0.5.4.tgz#9b0a842b442131b3801bae70be2ca4e9c510574e" + dependencies: + "@sentry/shim" "0.5.4" + +"@sentry/shim@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@sentry/shim/-/shim-0.5.4.tgz#cb826b1a34765ae5e1b21e61df2def2f8da91dc1" + +electron-log@2.2.9: + version "2.2.9" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.9.tgz#e0484cb1a8a84593095e3b69f47361ae15d73bdf" From 6c2469d6e0e9572cb8b276e7f9642c7e512e7e09 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:48:07 +0800 Subject: [PATCH 65/85] fix ut --- test/snapshots/HoistedNodeModuleTest.js.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index b70db7833c0..2f052a031fd 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -1387,7 +1387,7 @@ Object { }, "package.json": Object { "offset": "140652", - "size": 320, + "size": 380, }, }, } From 34e8f2e4510beb53738c01d73decc590f6449bb4 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 09:08:50 +0800 Subject: [PATCH 66/85] format code --- test/src/ExtraBuildResourcesTest.ts | 4 ++-- test/src/helpers/packTester.ts | 2 +- test/src/ignoreTest.ts | 30 ++++++++++------------------- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/test/src/ExtraBuildResourcesTest.ts b/test/src/ExtraBuildResourcesTest.ts index 985b43719ee..0059c559431 100644 --- a/test/src/ExtraBuildResourcesTest.ts +++ b/test/src/ExtraBuildResourcesTest.ts @@ -181,9 +181,9 @@ test.ifNotWindows( app({ targets: linuxDirTarget, config: { - electronDist: (_context) => { + electronDist: _context => { return Promise.resolve(getElectronCacheDir()) - } + }, }, }) ) diff --git a/test/src/helpers/packTester.ts b/test/src/helpers/packTester.ts index 6925e691fb2..f29f18d3427 100644 --- a/test/src/helpers/packTester.ts +++ b/test/src/helpers/packTester.ts @@ -122,7 +122,7 @@ export async function assertPack(fixtureName: string, packagerOptions: PackagerO if (checkOptions.isInstallDepsBefore) { // bin links required (e.g. for node-pre-gyp - if package refers to it in the install script) const pm = await detect({ cwd: projectDir }) - let cmd = process.platform === "win32" ? pm+".cmd":pm + let cmd = process.platform === "win32" ? pm + ".cmd" : pm await spawn(cmd, ["install"], { cwd: projectDir, }) diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts index c9facb29121..8da0b126a96 100644 --- a/test/src/ignoreTest.ts +++ b/test/src/ignoreTest.ts @@ -92,16 +92,14 @@ test.ifNotCiMac( return Promise.all([ modifyPackageJson(projectDir, data => { data.devDependencies = { - "semver": "6.3.1", + semver: "6.3.1", ...data.devDependencies, } }), ]) }, packed: context => { - return Promise.all([ - assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", "semver")).doesNotExist(), - ]) + return Promise.all([assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", "semver")).doesNotExist()]) }, } ) @@ -124,7 +122,7 @@ test.ifDevOrLinuxCi( modifyPackageJson(projectDir, data => { data.dependencies = { "electron-updater": "6.3.9", - "semver":"6.3.1", + semver: "6.3.1", ...data.dependencies, } }), @@ -137,9 +135,7 @@ test.ifDevOrLinuxCi( assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "node_modules", "electron-updater", "node_modules")).isDirectory(), assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "others", "node_modules")).doesNotExist(), assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).isDirectory(), - assertThat( - path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules", "package.json") - ).isFile(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules", "package.json")).isFile(), ]) }, } @@ -190,9 +186,9 @@ test.ifDevOrLinuxCi( targets: Platform.LINUX.createTarget(DIR_TARGET), config: { asar: false, - // should use **/ instead of */, + // should use **/ instead of */, // we use the related path to match, so the relative path is submodule-1-test/node_modules - // */ will not match submodule-1-test/node_modules + // */ will not match submodule-1-test/node_modules files: ["**/*", "**/submodule-1-test/node_modules/**"], }, }, @@ -211,9 +207,7 @@ test.ifDevOrLinuxCi( packed: context => { return Promise.all([ assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).isDirectory(), - assertThat( - path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules", "package.json") - ).isFile(), + assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules", "package.json")).isFile(), assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-2-test", "node_modules")).doesNotExist(), ]) }, @@ -243,9 +237,7 @@ test.ifDevOrLinuxCi( ]) }, packed: context => { - return Promise.all([ - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).doesNotExist(), - ]) + return Promise.all([assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).doesNotExist()]) }, } ) @@ -273,10 +265,8 @@ test.ifDevOrLinuxCi( ]) }, packed: context => { - return Promise.all([ - assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).doesNotExist(), - ]) + return Promise.all([assertThat(path.join(context.getResources(Platform.LINUX, archFromString(process.arch)), "app", "submodule-1-test", "node_modules")).doesNotExist()]) }, } ) -) \ No newline at end of file +) From d691e60462e745aa14d75238cfc8052cdd2398cf Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 09:14:33 +0800 Subject: [PATCH 67/85] delete filter --- test/src/globTest.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 63462dd50b4..ec107cbb274 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -135,9 +135,6 @@ test.ifDevOrLinuxCi("failed peer dep", () => { "test-app-one", { targets: Platform.LINUX.createTarget(DIR_TARGET), - config: { - files: ["!pnpm-lock.yaml"], - }, }, { isInstallDepsBefore: true, From 37e467fb99153c9101af71778e200a9dea22cd2c Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 09:15:47 +0800 Subject: [PATCH 68/85] format code --- packages/app-builder-lib/src/util/NodeModuleCopyHelper.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/app-builder-lib/src/util/NodeModuleCopyHelper.ts b/packages/app-builder-lib/src/util/NodeModuleCopyHelper.ts index 82552b89eaf..b61f0e2a513 100644 --- a/packages/app-builder-lib/src/util/NodeModuleCopyHelper.ts +++ b/packages/app-builder-lib/src/util/NodeModuleCopyHelper.ts @@ -21,7 +21,8 @@ const excludedFiles = new Set( "binding.gyp", ".npmignore", "node_gyp_bins", - ].concat(excludedNames.split(","))) + ].concat(excludedNames.split(",")) +) const topLevelExcludedFiles = new Set([ "karma.conf.js", From b9c85e0ede8e8799014c459e79832a7e89285d7b Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 09:39:18 +0800 Subject: [PATCH 69/85] add ut --- .../test-app-pnmp-hoisted/app/index.html | 13 ++++ .../test-app-pnmp-hoisted/app/index.js | 32 +++++++++ .../test-app-pnmp-hoisted/app/package.json | 9 +++ .../test-app-pnmp-hoisted/app/path/app.asar | Bin 0 -> 714 bytes .../test-app-pnmp-hoisted/build/icon.icns | Bin 0 -> 34120 bytes .../test-app-pnmp-hoisted/build/icon.ico | Bin 0 -> 370070 bytes .../test-app-pnmp-hoisted/package.json | 15 +++++ .../test-app-yarn-hoisted/app/index.html | 13 ++++ .../test-app-yarn-hoisted/app/index.js | 32 +++++++++ .../test-app-yarn-hoisted/app/package.json | 9 +++ .../test-app-yarn-hoisted/app/path/app.asar | Bin 0 -> 714 bytes .../test-app-yarn-hoisted/build/icon.icns | Bin 0 -> 34120 bytes .../test-app-yarn-hoisted/build/icon.ico | Bin 0 -> 370070 bytes .../test-app-yarn-hoisted/package.json | 15 +++++ test/snapshots/HoistedNodeModuleTest.js.snap | 5 ++ test/src/HoistedNodeModuleTest.ts | 63 +++++++++++++++++- 16 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/test-app-pnmp-hoisted/app/index.html create mode 100644 test/fixtures/test-app-pnmp-hoisted/app/index.js create mode 100644 test/fixtures/test-app-pnmp-hoisted/app/package.json create mode 100644 test/fixtures/test-app-pnmp-hoisted/app/path/app.asar create mode 100644 test/fixtures/test-app-pnmp-hoisted/build/icon.icns create mode 100644 test/fixtures/test-app-pnmp-hoisted/build/icon.ico create mode 100644 test/fixtures/test-app-pnmp-hoisted/package.json create mode 100644 test/fixtures/test-app-yarn-hoisted/app/index.html create mode 100644 test/fixtures/test-app-yarn-hoisted/app/index.js create mode 100644 test/fixtures/test-app-yarn-hoisted/app/package.json create mode 100644 test/fixtures/test-app-yarn-hoisted/app/path/app.asar create mode 100644 test/fixtures/test-app-yarn-hoisted/build/icon.icns create mode 100644 test/fixtures/test-app-yarn-hoisted/build/icon.ico create mode 100644 test/fixtures/test-app-yarn-hoisted/package.json diff --git a/test/fixtures/test-app-pnmp-hoisted/app/index.html b/test/fixtures/test-app-pnmp-hoisted/app/index.html new file mode 100644 index 00000000000..8d710f08e6d --- /dev/null +++ b/test/fixtures/test-app-pnmp-hoisted/app/index.html @@ -0,0 +1,13 @@ + + + + + Hello World! + + +

Hello World!

+ We are using node , + Chrome , + and Electron . + + diff --git a/test/fixtures/test-app-pnmp-hoisted/app/index.js b/test/fixtures/test-app-pnmp-hoisted/app/index.js new file mode 100644 index 00000000000..e8ddab327ef --- /dev/null +++ b/test/fixtures/test-app-pnmp-hoisted/app/index.js @@ -0,0 +1,32 @@ +"use strict" + +const electron = require('electron') +const app = electron.app +const BrowserWindow = electron.BrowserWindow + +let mainWindow + +function createWindow () { + mainWindow = new BrowserWindow({width: 800, height: 600}) + mainWindow.loadURL('file://' + __dirname + '/index.html') + + mainWindow.webContents.openDevTools() + + mainWindow.on('closed', function() { + mainWindow = null + }); +} + +app.on('ready', createWindow) + +app.on('window-all-closed', function () { + if (process.platform !== 'darwin') { + app.quit() + } +}) + +app.on('activate', function () { + if (mainWindow === null) { + createWindow() + } +}) \ No newline at end of file diff --git a/test/fixtures/test-app-pnmp-hoisted/app/package.json b/test/fixtures/test-app-pnmp-hoisted/app/package.json new file mode 100644 index 00000000000..9684a4ec8fe --- /dev/null +++ b/test/fixtures/test-app-pnmp-hoisted/app/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "name": "TestApp", + "version": "1.1.0", + "description": "Test Application (test quite \" #378)", + "author": "Foo Bar ", + "license": "MIT", + "homepage": "http://foo.example.com" +} diff --git a/test/fixtures/test-app-pnmp-hoisted/app/path/app.asar b/test/fixtures/test-app-pnmp-hoisted/app/path/app.asar new file mode 100644 index 0000000000000000000000000000000000000000..2967fe1b48409aac2a1670c780622d8b89fe8a1b GIT binary patch literal 714 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 Gz5Z_sE#UG1 literal 0 HcmV?d00001 diff --git a/test/fixtures/test-app-pnmp-hoisted/build/icon.ico b/test/fixtures/test-app-pnmp-hoisted/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..66c8e1745d2aa9b85c47c0925eba14e9c7be0a30 GIT binary patch literal 370070 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/test-app-pnmp-hoisted/package.json b/test/fixtures/test-app-pnmp-hoisted/package.json new file mode 100644 index 00000000000..aba7a0796d3 --- /dev/null +++ b/test/fixtures/test-app-pnmp-hoisted/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "build": { + "electronVersion": "23.3.10", + "appId": "org.electron-builder.testApp", + "compression": "store", + "npmRebuild": false, + "mac": { + "category": "your.app.category.type" + }, + "squirrelWindows": { + "iconUrl": "https://raw.githubusercontent.com/szwacz/electron-boilerplate/master/resources/windows/icon.ico" + } + } +} diff --git a/test/fixtures/test-app-yarn-hoisted/app/index.html b/test/fixtures/test-app-yarn-hoisted/app/index.html new file mode 100644 index 00000000000..8d710f08e6d --- /dev/null +++ b/test/fixtures/test-app-yarn-hoisted/app/index.html @@ -0,0 +1,13 @@ + + + + + Hello World! + + +

Hello World!

+ We are using node , + Chrome , + and Electron . + + diff --git a/test/fixtures/test-app-yarn-hoisted/app/index.js b/test/fixtures/test-app-yarn-hoisted/app/index.js new file mode 100644 index 00000000000..e8ddab327ef --- /dev/null +++ b/test/fixtures/test-app-yarn-hoisted/app/index.js @@ -0,0 +1,32 @@ +"use strict" + +const electron = require('electron') +const app = electron.app +const BrowserWindow = electron.BrowserWindow + +let mainWindow + +function createWindow () { + mainWindow = new BrowserWindow({width: 800, height: 600}) + mainWindow.loadURL('file://' + __dirname + '/index.html') + + mainWindow.webContents.openDevTools() + + mainWindow.on('closed', function() { + mainWindow = null + }); +} + +app.on('ready', createWindow) + +app.on('window-all-closed', function () { + if (process.platform !== 'darwin') { + app.quit() + } +}) + +app.on('activate', function () { + if (mainWindow === null) { + createWindow() + } +}) \ No newline at end of file diff --git a/test/fixtures/test-app-yarn-hoisted/app/package.json b/test/fixtures/test-app-yarn-hoisted/app/package.json new file mode 100644 index 00000000000..9684a4ec8fe --- /dev/null +++ b/test/fixtures/test-app-yarn-hoisted/app/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "name": "TestApp", + "version": "1.1.0", + "description": "Test Application (test quite \" #378)", + "author": "Foo Bar ", + "license": "MIT", + "homepage": "http://foo.example.com" +} diff --git a/test/fixtures/test-app-yarn-hoisted/app/path/app.asar b/test/fixtures/test-app-yarn-hoisted/app/path/app.asar new file mode 100644 index 0000000000000000000000000000000000000000..2967fe1b48409aac2a1670c780622d8b89fe8a1b GIT binary patch literal 714 zcmZWmu};G<5beNJssC_zaVkoh0jeq}3otSv5MyPM3pH}=V7m=a<=;8C4J33p$v!{7 zckkWVXf#?LJyUY z`Tz}`a-(xENjtYFJRUisDeNX==wXRgV*>-mXxGTXuTxki$qd#g-_|~bMUu2MbpLa# zj3}NTA0i&&O6PM97qD6t(rQs5o%#F_-`ZCyIR5v&!Ph&ZJ!J^ffhtSKtvFlD3TQrkYJNUK{5!E5s(}tr-p7oK_#Q)BudVbGbVBl zf+9KRoI}qcy!X5F&99j?KW44Dt|eVvRi|pFdTLkgecIf}#sL6cJuVG95d!sm8Y z<_?ZLJbe%-4h$EM>V_thvx&Wfxvh;RlkIa06C+25XH16nMrP(FgM~60sx`$H%baJLd)X3a|Yjfh8f}*co;MIGL~6C9a9Ab zH8pmZifb>M?IxQIEu(*2=?J_W6!4rkfR}{wkrdL`4@MUH=*?z%fr(WHph*QV9s|4so|PUv{I+dA~IgTP3Th}Y20OitX8tX%v>e3b3?UyHF<8Vf>%s>lza zWAQ`ICB`bhcja0<(hpL-(^SR=P#yVDTLw^IZz!9xIB~R@79WImq^)=@OtuS8a$IeN z8chHBl^MRCr>s6)!sa%cDZ_C{HOtL{k_2g$xTfSmIQ6omWRL6d;jXn-$)lU9B>A_+ za3(Dtl-N5DO-~#SWR0K5en_iyO?^9ZrWZe^uJlsG1J*>BfixU>;#LbqI>oW0DNl&q z_`s2?^)MtQ$s~xn^UEXuQIXs^)&hJuXT_jd-XSTY>7YD zwq15XpW<&y#sn$lxkcl`w2FTBWwj3oh^iPQc8R^!f!MVZA2}{s3fIl;kC=Xtothxz zRL!}5Du{Y%h?5!GdozWK)7yKrs^-c2`y`nV=l!ysw)~DO!=LW$C($u8Jr@TxNrE(B zfLcV=8~J8t?TQ`_5bh{^z8TT_Fb&XrdDzj~M|y%y^V;g<`z`)Q;;cL32GpzS56v3J zRP5ImE`oJGJz!4$g!|^-?GOv2I@(O%jlc&gWwHZ2k7EJ&DjG3Ymek zl61V8c<{CI<7#&AVP1fB*8KHz{w864V~3LqwOPAI3lW6wjVSWL)-D1x@2_I{{IIr= z{*V&^++W&H{mu=;7~iW9fF)) zpBtZuI{#UD)el7`%|5WtqLVos>R?)CJmuwwRK0duqk`z`KTDw{P^A92qW+Zs=8<(; zNGa(Vc-$VVc^vZ5ouj1xfh8`wwmScQRv7!y?-rWnGgY+n}%n_(ZpEwEp% z#cSTGOMY5wzyK-WxFA`LsX(TuB;7`fKR-P@m3;&{W_s`-3b|SCk8@w@Nn4uGpBpL(4}C$tk(t?eFm>cs)R3mMHjt*Sfl|s1 z_*$o9JtK3b#`>K4>aaT%OHW(504|-HTG`>4xrQ$TKQ1Ui80a8Fn%%9q%ErGCqF0{D zud1?}-*%C13pra?0Q4zL>tVypmmA#qfaY?#=en5cuN%=+rwafaK8N6PNV`QKmnpMJ zd-W;GFFbva9$5sPIX58y(h9Y(qNV-Rsww{r7rl2{xZk{wIadN)E_ti4^0O{5`?oZkIbvtq8ecB0*GwL~u2%pk;lq^xDZvWA^X^D7%yT2x5$KsU zW<8AC{K+y17O zl<9)lDRNf6$XQN6Wc`LiX+zuvL1TWWLwG~R2yxM5^UROVrC?9!ira8H#2+gjAs2`0 zcNb#df|K89-Mj`&6ynyun!3t(KC~MyLE!X0A@C7sB5c7wAGn-8)Wt;%7fpSMN%nk9 zHqwj?AS2UQp5qJ`L1+#mZ4!>8`~xM4nY#qLSSW1-NgJyN0PY(!He13Zh5EziFR(jy^bQnB!>=foC) z1iTP6Cp!Oj3&sk>KOz%9-#`tXf&}E;%02gN#{9rJ$jlio#QPs6|D(zOnCpMmzLGbcRkWEww%}^>*It{)pX~pJiOloIO;(a=%ZX1?B@nEnGqf zZ&6dMOkp956=+CPAx@col1H_GS*XA{{xVH*JQrcT;N~5J;%aPcsLqSA^wpKYGuf;a z`z)ym#v;k59T}X65xtYsmxd*$$^fv;CfQ{(`2^k=C^K6 z-$UwzR$*?{xf)(uRa|ZoM6yqIU@sK&!doNf8kv;&qeU{Sy$f<3%CEE9QopacZvI;y zM00^n(9!l|OAf)Wa5enCCW*a!9CeGhb<=_p5}^xG_ic8Q-~JvVdeisIi%HV`m_IkZ z`yrX3@wiHFZh$UkJsoVs^?Ab4YMr3+$$D;)ao#~m3wdC@PiFtdbXj}2@W>sF$hM42 zFH&=upMo1gq3o>$aRdzn<(e@fg~A@rv~GLf*JbHn)0b0<>8diR^=KEV5U)r#Bz`M; zZE<|@>N~!kORyCBWEUdOwIJ1Lh&o({-=0L9kKvsQx%)tUNz1W*empxbb$W)3Ij=TJuWBFmzlQ}Df#U6 zq>{Q1R@H+MRHM$fcxnrl(RQ`T3922^_`GOd%1Nj-u60WHh1FfgF%1=)U5PzXBTtbaJzR8sV`Y5A(WtMp)+aZv){cM9Ek*Vdo)mh&;Ov6b&`Oc=GT%{+r zKYQzFoL><%(J^7r`}hd|`?(Z4M?K7gduvU>Nh__^9zh1xLPOE35GdS_Az6{|DCIsf zD5&S_y5(Y>Dy3OZ`lY*|2T<<iRq!C zW3I${^k`%~lup$2KIJ8X!J}hSg|8w8o2+@kP{iA3^enKeOiJloWJf!x5oCRnYgK=g z62dJb3#XZnp7>EiaFOLFIX5A&_x1hh0`?rp`cc2##BSEgz2~xdfd3eaz;4+5zM>1w zhonq@OVx%Dg&(Omo@V>jZArUsL0p3vL(HAb-M;6(btOV7U#VB zICJJxyQ@V`KmKTcw*Kh0#aMsYvTpJLYNLu(4n*_N z9s9`V$~9Nq>ThLU_yecRsM^C-zpUd$fLm{NC44VR7kJ!uAN3I7Uyu1jwf}5Uc|X08 zxLLTaN~5;8R@a%1s_jmCLK&A?9;L1y)60dq*0&=mYx7R{Q?VYqEk;#7w*#WuGd~DH zDBT~o*{U5rfspjKkx)YE2`-zU+}2*%RA>=B)OY=?>yE#?y80+Pspdd}|8deEweIaq zf8wT_igcty3kPs?8Hd%Q`)9%XPiXK<_$hLy`*cL$Jb;2%-w@q+5!rJ9v=aQrkhV zDnDbD{%rVev@mY1!l#g+{h=fp&toFO&dBz>Fs%-}0tEFj%WWVfiIG7HaTV%uA8)$o z!2?$JY;^8p+i)>!=iJ#a*kZoVS}-(fK~IuDqRA!*{uH@NkBYWjCFZr^v@7My}^6o>5!~Rh}BIJ*FPMk zz|_-_-70cmy@R_(vi>bvjJN(*A#f{$y|3MJ>W0ZA*}#LT)=BG{$^Jci_uE9JD`DVJ>tj;al1`RY6QCpE}3fH6vVf(}Qd(Ve^`x-N{ zX#r#yIKdzrkXC?;ur0N=h8Sea>1_;pAt59~eLZ(zON7PG4)|pup$}XRE0?SwW99FT zW?mlqK@oW|srqmjqD$0Z_B#5u6Adhy8&zu4E&|fI-(++shKsaPm1`s^;O^oznC(CY z@gEJm=k_>`RKPLLmJ?gwtL?1&vNsc%NN=D!mXYewpT3`T+ja%7FB5%_g#e(=>b8mS ze$m}Q+)Ynn4$-ax7>4IVeT$sv5vbc^vBkCYys9do8p6ZP58j}0At=KeX$H7f%h0Zx zF)!fj%-y9DWxy{1@+$=W9qOch^!)ODRB0(N=cVSbWYRT%*$G7seB3CqhyA@~mN8Qo zn#^nFkWHu!_;kD|U!2spJwvN>+=c9AE6CdKqR?HBJ7)77K#c?ex_YVb2vk<2d8#TL z#%N$kh;DEH`?YCM`(0j;)xO#thCw+Um^RBW=@SBa`mwk5pKl0j1MWiQ1!EfZPa#UV z9WVpgV9<>1?d26odAJM~X*X&j^SBLY5TEg^SMcDOayj>4;0{L8^^6(%l2lW$=8vq# zAXF)u-+Df(GMAI^mB;sVLlDCJm^@YNv->T3NYu$6@+Q@wc#=u=#+ zzHV%L@6r->08@mE@IF}J(9QKf#_qRI9$dmj>hQ|dkrc4n{p@M}rM0R`3AtZ?2XI4K z>w3O{BDmeG9wY++))wG>u`}o`$+miQL_be|*}pKOaWF`(i!2-IA&M3R3IO*f4^n^t z^XK!|prtS|`yIZ_5?AUm{gs763U`h_3C8nyPlj=RYwmTu=>dIr*|O&fu&dm5f0nc= zHu@fBU#YWNEcsKr7^Ik0xH-CWvJ$w+_d`DoonWgHBhDiXg-huhtOwqxSboq^Xb(Fu zTXm_vhsbw)iC3Q?lUKKSBip`4bbR*;%}>;~fM9;`pso20PKn`xZ7E|d^P(A57ne?= z*1O)xe4k5HT`YFm!KKuQZM5 zahcPr;pwLQy5As|gSaI7ebmIE(0ak!L=0oK=-QsYL;aavbV8O{ZHY8(-ekKcrK;}b z_{eT<#fa2JZo35&<%7X?lD4{~!NP9((?}EkQSXcXrj~uDFVFQ7IFhv4i6RvQTA9=F zPdv(;XAS~(8{m9dxjeVzK`GqR1{#pJrZPbpNUY7VK$S^d9UOey)MjU+?#{O#xI3Jz zec}>5(pViDaM>laJZOmUmtKV$uyL%F{)}L&GbGO>E%@4@@+722xlVU>K9%(hh3s+2zfr6;WZ6%pn=xTe*l zTwds2vx*HADtYQNykSxI!P%Ve57Y`0;OupkG@&+kDIR@=FB`@;d1$}Mef=|AA$xIP z?F=^Pfhg<2z%A9680=9)=1eXyP*{yb3)9Uyy~Bp6X32GqAGTMVAwRg&x8RsZgqO2?7Hogr z3{Ai8DBBVtwt!vbidOEa{?PWB8z??(GGKo9C2$fX(oO{97lM|9`uEM8#Pz+vn(nN> zD|%nuu43x!x!v>o`QicgJ|01#%3ab zRXJS6wZQ6l&+B_$^tVfI*3-#>I|^L7k_anIl(7F)owZri=#oi*kFs zPE{sD0=hSXr0I_HU0QjVRYClVaZ4WnH!G#a{pQ`ilH(|b3XbnF-V*g5~~h!M8$=FxdCI-mTF$1`gPdkUTy0?{YB zp1;E%+hg@RqCygR-k8s2hB(|8}3o4y1)kZ68;x_9mnbb9t19jAH zUv4tvqOA@8$N(5a2#VzIY`@#GK&{*B%2ZBP!%HIBHb>u|Q5nw5Sk@fz20j%Fz{3m@ z>J;TDi+P;14es*3z1f!0%X>2a(#DG7=U+ckGF;^Kg&Z=BAK~2Q@B`1tDw(dT*jj91 zrlgmPU48%Bo1p^mG;OF9D+yqFU{4c7+ZS%G$i8C`auChu`gv5BINpSvGOl)2ybZji zzJm{*Ij)w^A5qzVsf5ykr$E%5w9W@TTroMr+g+8~pnqjE{mzUu-~(EWXN|>42@xR* zL8&)%o-8F7ziid_XbLWE`vBaOr!i#Yc{;XYDm=ZynX3D%x^SuWP-mx5rp;c8_@bVOg@^hZE9{JZHA~3y!eisnc}GKV7yBmW z`4+s`6vcUFzIuB*4K&H#x~8bk+z$>4Sy6J=6vHFZV4M0sZjCzn97zzV)cCGf+afjf zQ%XS3l=vu*J*U5DB!IAh5HWFyK?LSQ-c`2PKN~PwyI!EPSyQtSbc^_L85@_C;;jr$ zk|^#ND-ZrR7W(>2{)8t?Y||z#k6s5Lrx${{6=jb)X}E|FCG| zWLh;x`E*N8XmQ^zWLI&{1Z2Ol9mg)>gcCv_v-^0hygtO1si2o8B>jegE@YI zdhNBy_zd*O&E!>6+s&v0{fu0I9Qa_e&^%m|LcHg}pH`-y_vBS70l2f1_l)zxNCXwe zA{+H0en<4!dpUf6xfXR(7&bF!+b_ZY~$+yBB>@>EB6%rRY9=3~4Vv7^%5@LfWDFUebv0!kbhw zh^kC(!w!vbYQ$U2W*isI^fw0&l9lxs4w(^B|RXbfY??J_Eq5 z&wzQ8B9o0FDEHsf=}*G5-j5jAI^VbS8eSWFQL0|1-RrX6TegncN=+QsKNj`fQEYeA z4xE!CO$Jz{-?)(=#{@AbUCD(K%Zib6(LX?f-P z`(c^aQmfB@=hBMnpl=7)Ze==xgY@K{W=J%^t^N!M%zXHrzS++l@Cl4st7@!zrfv0V zY-1u&lFuyhm15h0TxM|)=Po@<3xR8r45o1n_U3zi{gq{j6P>sv3U@qIPQ+6i-Ty#4 zeVJ7I4nzTmgXPC891*IDOnUvxy{V)7;KH|OK%<4gTN{VSVn5^r%qrn^nhS)79*x!o zE30aYgONG7S2XVvqh3hf|7GKN1;ct8d!Z-%fkuCV;(NT#k;+>Yst1GJ&LBuG9rWCX z7G5hTAp}YLrB8jIk`&}BfXRo4#7-GG8qm<7rqS*#e^1Ap3{wa_VyDjj>Hs5Ql|v@s znHfDNL=&n1ks5OaA348PFoDmhLad*V1NYRx2PVM@f_KL#pz!zfpkIrWkM#vwAK?@+ zD20Lks!NjmkLhTDBtsJoO@4m=niPO} z%n0S8oTtnwUN&zX>cE78tAaBtukv8-se&}3I zK-UTaXF%mJj)Np!!a}=HFct=${6Y(cceA>Ypo>aGhcEzdtm>~b6VZo?V3>I=avUp* z9vG$S-jD_`1E8Sw%EqWp1>KdggH1BCBm^3P_hFY_NGIO~XKMMYNr3r5IC!v~Zzx2> zv#!q#Ku@nTff#iJi3}!{ciHM>;AuSG^+wyvsJ9@|$iBN0B5*+lyZze{InwT*LwbSS z@g5#1BS@bo1qm|Q3e)>ypvAn%qE#=i4_8l6P-!8j4fLoe!0?nByzx1l>DgFpFLkby zw_;;5&HN+>U|G)>SRVl30{Xb87BuE}P^?q=V`K)KdwAIT);|VZ`TrtSir}+In78ZV zlg!82w<5vwn_L0kyLv&8lb48UP&Y@X_ePcR9xA94s>_}d5Cb5Lg@hGcUdb?~7hvj1 z*k&B{lq7qaR_Yw}#`MntL79?S z#W58T*;BdiZcODrRUp$YJ8J*Au~l2EW4lQUZlk9+zG&G9csZ-xMxOvTimKWk$wQ8aPMNjzLNrWtMa{jVq`P_I4zmyXen3o0mPsX%s;t)Eg2YlM^cFv z%Wd1qG`V*_Gek2)7BZGKZl+f}9pW{>e-K^==CPoW<;>o|O=AkMjKcVPjkezeJ|(d* z1jc|?&~{bU1q6bzL+$S@E8f z2fBWB@8p*m%_Ayqb$4InOHhsz58E&RG!j-?-E*sMu-_=t3Cs(@NPw2~%5m>982Z2D zNNha48B*-9ki>6z<6$!Bs2~mL#K6eE98>^1!S5!md*lyd#5WM=;f)C;454NiY*mf6 zSLLKx3elVh)DXNVJv*Euzrl7KFSlrTyRjP9q*cMC6hT;X7oul?J!cP99ymDu+c}hK z8tQSzkE7>D2C~v9B#*rE;kPMLXd#oSuU1a z#9oOO^+xrCA)ZA-E*hlp+f@Y@Qn=O_ayRs70K78Wan9SJEEZjqOb!KG>2HdGj@G41 zbM41TD!$$xiZ3LV3wWULXi6|%YAgE=j!1@WnS1H$jB*`YY(5|ZPk;ZSHU8QhcrHum zbZpYqz8}AW|CN!%1(ajCY4iy_Noc*L1uxbmY56^!*uYP7FGx($4G=7l5FS#|NKjdfa{=z%a9r@^t2=3QIk-LlATozwGzqG6?k(F=Q7vsJ zk2)LkL>_-ug)@PGi^z;gAAJMfV9jom9vpP@9|+8>V~D(!?3+!ojTuI8NKVb2$e&WIZXS+DHflOe&^}ZfqnO$-o-(ssshB zp5Yv(5G2J&Orgl?HDL4;0Kc!8L;MdYzdB2Nx&>l$1o8sYV4O;39G%)gz-$pAV(v+y z*gu9%e!X>*5~y{I4#Zr5DiUFUff~7;K#|qI(BF-nE@m@OLtr%%%YZeMZB_SmGtezK z!(b@Ic}`XjIe=k#^Whxr4YZQGPWuYR-yHl1ZH~S2dgmOlkq8pZQj=z)g9(^DcA6ir zA-B|0L4J`ThDP?`ItK+#3r)6Z19KH9(qNpX=6~|Mq_i(G)#y|JDd9RP(3J%#Ln@pm zs(pnbMSe#YsgImvJ%BMIB&YgLcnz3m^F|eW$T(i`5Gr>*#^B!gt3&lqozoW4yZ;dO z1=<-DIPQkSp$W{TdM4!pZrgij`BVVr5rJ#SHNtE&2qIIh`{7$Kt?xol2tkMw^;k;P z+PiCjZ*7_Qt2SJWPb;2kz<=|pDUQ|cK?1sSR7E5CV13b| zBF>a=(##+{)taQ~s0jYs5O_MOUjL<>8hc9!n{>13`KdXe9WM0jEn7>yjBg}v7WtTa*G zp|j1LCb_S`;EpSU=f9%n4Q7V?lPyUSTVH#c6brDi0nUF5 zKI`jJ?pd1T2jN~wr9K)>`))g0=dmvZ1>i2NSGjX#+fJ!5X%Tr#n zaRK*oV+SS=M{cocu@heCquvj;bv>tXLY8`+P1nw`qUhI>r>3<}xz!dwcvo^xVjlWN z^?)c!w{@EAncPop;GxC>_>w^O>|aI$azD_=KTYx;q?n_o^0-wTd5IE;dz$cfVL$$w z;75*Am-MuqnPBdYMo0~FN1{t9*rRf~nP`Jz+w|Mlsi1J;3s#VX#le9UWWRV+0INME zIsJQaTB#|@{y5;>!#RrMLi9sQ+}rrOOT(Z@{IhIp&(6BvQcA_3|9>`3BjMbgry(Vc zb=v#vM!4uJhTVaYbsC2(wAmswk^ii&b*Q^lztPg(?yU{?Z|RU={rwHw@ywUcHMvPGkkt>k!PrpDFULF|e(WyB0e-cMYgvxS3oj_!YlTH5i|jsnhhFe{#yT z?Pv@4wSjDY@OtK9(!OTvef}edMr6>}i@g6-s0GJOT2*%4+Ist^1VBygtD@Kk={wv< z<@J^O;2p%76gJ>pYIL17vS-#7OzvIVQ+!fe3esi}l0e1txeUe^ zb2;$>GXr9f;JXIfEY$eNK`viP2@RIsI?9NwbE{Y3{AsN11aD-{Ea5uE+R(Np)sM0K zf$NVT$r@W*PK0HL;ZMtm(%@aR7ZzL1HCDEGMF(uE2%&i`>%9?zAbhAlzZZKg$SZ=XMzvC z4iVj%ztgpo>GcXJ$qqOw)g4Uvj6}w?uc|~5oxF8#uE8NNd3&DfJb@TnyrUR`a=(1J zNb(~MPH6UbcAHVRnAv@7gD%WrehoZugHHV+bm5V=lM$Wvzz+Aot-GM1c~1F=kE$w; z>e$Fc)1B!O11CIE(H)!R{{Ck)sg=1;7nsE9;UP4=r~jGD&#veoP!~FhIcIe&7MJEq3)?>3yL;#9$4D4#Cxh|m!FpR` z>}m*-gZb5%8YJ1H`1H+z2fbKQioNvyRyXGD@C)oKU@TCyPB@8;%BwNz&2kfUerlMm zK1+aBe*LqoR#P~)a>2KjTOey!>*44u_xS>bz?Zf}DyEypx)OwKG<)dk4+8VQ{e~K- zO?>NL%&s)$uj!;*>nyCv>zNBH_}pdtD^ z(|?42fyv*pf9UK5GNH6qk+YWtc-WJq=m@#;<5?L!6NU+RUT%B2&@JcJzOG07d8u@ zCg)pp)+v4Y{Z6#A>JiHMV6f9I_-q{rVrD%@^|>?qK7o5QecR9`9%oVp)IemVV${oA z;l(2gXl;D9^Bjlzb-8|#_JyxcebzOrAA(5n_gdHCvPNkXSvlWZ>r#8>K>sC)7&Qbv*d*DWz9zPQ>H6(3Lj)N z_g`5(GZ{_F>q?e$H@xC2rT>r+sg>R+p&iqj_?k#?Qmo4VH6hk5Nn)-Jpv0y*rcqBLe{?u*%vk0 z|IZfwMe4r_|6=EiL6BABbEe^^OkW7&(wQ(W!~{DN6AS=&dHEuEp?ti&XdsRk0wCkS zS2(e}pLhX23_rk!=Ens)@bmKp@sjZI+-75A=V4>x;N#=E&Bn$5j+c~=M?zOqOHD#s zOP+&EM)%nx_IJEw_n5u0huCQ_M2#(BhyjbyZ2WI{$?q|vvG)4P&RE9)tX?Qq=Ob30 zlP}=BUXq2*9{Y&y$U7Lz{s?Qz%70NW&C2A6)zHRTgkoJIL z*q0?oGF;#|;IwFLWv#0P_DvjCJ`{U&E{Tv;3!NpliLh##C?8k6y z^-pY6MD#@q$>}qVU&|}8O~0_|jo7#kXOi-X1RJVBZZ~SMCnp{6S`T8*8+;>)KE$RZ zCnv>zOpXov5dYEtT(H0gOa%Uih=>nSk?$kU>Q2QEjf{#ypLRH_`7iANQ3;WdQ@!Ct zC7o&!?@XJgnuVQd76%K=jC>fw8<_#Hz{FV8D0FNBK#u}rAHe_UQRv9%S>5PJ0{A^{ z6f*YT|GXN-i~ytP5y&W5cy-#rZxk3uPZLg!Pft&dj7&^VPmK7T*87g)4KISqJzPX% z@wfi2g2mMl-}9EMV9Wf>)B<*X2|KfbonFIEj`;jn)5P%KdF;er?BX(ZWCA-o{694f z&ts>jv2!cf;s4fjaI`WDPO=A1HNT0S_-DY&;9Of<3v<||RqW&n8VgzahYAv~W&H2y zRKurJO^*FTIPqD-5ZEw+U0BABo-^t@dIhXsS(;zKu54hZR`0O zn@Y|8gh|V$n2}OG4kLGkARr_Nq(Nc*%JYzzc~5NcKzw?CQh%@A7&CtB!vs4ohtx?Li$BZNA2o zx($$~r_Pdw*01%J3D+cF=b$3o_!)m&!4aCg&6QXC3OU43;5J|wu^7+uN~hb^NKW(X zbTn0H{*MJNRt?uug1=>`VV@ZX@yh^YEn4>x$$OGATp*xLD`P*MkKq_7ku7*i_xdiwf~hPRMT;Jn`i_t zWR`YnDhTd^$ax~7A*%#0CWfYeT-YV071!RwV8*8vX>{FwYz5}>2<7`(+=Xu>YAhhP zg;d~e7{9omZ>Z3mh!a5$%?{$^^7ZcGulHzBdv{-jm))SP=Vpjl6?esf>K@7(I)I=s zd@P&5R>nSQsSPhCgO+Aev$a{f3Tr&m)5_rnR<{Xw|nyROno*O-7bxeIDsH zg|$ONN6p1iU*tyb-Ji0A>r4_zI9~{$>*bEa2PICnIAPu*jPG>VAqoWO3VxG)QcSi9 zs=2iJ;a##=ThM^_7V8Y#Y*kuV5<$QbAkF~0Mgp-9{%eHmNi6i(Cj8SBn~>bfuZUPY zv<#qm(LT@m+mHV#_w)l-B(v$Fk%cxIR8aV?czVC*rigY+uN z(WNI#>>qqAUq2iipZ#;h;LU05^aRd91MPrUhtM!>-kFTdn`vbY0_7;O#H%+@w&6H*fl~(WBUNIt19^iFWidA?nnL7aA~l<>Sqfw zbPe2X&9i(C*JGWDS7rE3(IYRd>tWsmeh2h0Ej);Q1Wir+DLaPtG4XjUyqD`)ayrW_ zwzYWQq`P@^XBSj-dctpw1R)0MZutDU1=Avg2t1p!0oh@RYBsm`sBGf_gxa`0r}yMs zL+KV>VIw!<*F44_^G+xzKB;>JTIVGgjfQu~Ki$g%oF7mwN!ijp-7HYtez~?<_R@d? z+IYh>(Ymw8A2cb>*Fc4AM;?R!SJPH=`>N;4df6M~IOsyLFEo}1^;cYH@P3pJG^pfz z!+mT0kVA;EhYKsrr=-NumosJgn%d_%0s`XFNVQ;sH% zoiNLZ>#O(yWi|>Pi+bPH;OAzNa5#n!v1S93x-07z5}z(rA{@D$cE^DD>%(Yt<68Uv z&tg1f8Y{WeMa>PP@n3(MGPbRB4EThUz5G2={{??-KC0Pq=VbG6dC#7h60~GV2H2nL z5c}wx`)-cVTG6G;TekSKx0x!}-$~opMTZi-7Oo&>*ob=Bl}=*j0;7pqof<@Vk+1tm z#NAqijIA3I`}%oqnNscC$1w;g@#sjc12y1^$l!1ZpPafc)Tuj?ARH3=cnf$Q$1-l? z3K^Y%z;8lLg_f?M;1K$*NVt>^-pA3mG$MYXi|`F;Z1+veCPyy%hSj)r>5q3v_BqK9 zNTAjsK!p{`%U)!vQfB2aPHbBxX2GN~pSY++@G5A#J-+D4EqCn_-_VQHLyLiox_I-?TpbGcKfY z-m=NbKJjnoWHVi_`qEupag7nj=-T3`r~4$}%3_0}a3XNr_;6S%zL>hXqD#M)5u!Hc zADp7tymaz_z33Lc*`>d|C-LM{BET%yXG*;3CvanMUCoQBZ978|MXN0E^5tMF!<4@S zm^ON3uuOHxy}S6ncR65w^~`bz4p3=Lw9pOUi^fb#AxQv9C?p`c>-A~fUEnvn!?Y$` z3f=@rDS>8SObnqyFMX)6=YTQ5i~$DLVtUvYfAnSKPK%DvH7F_g1S$C+66kM9Bp$-U zB#(v=0|%dg6IjDBOY{hw(3-m%!LN{h;1jS{_xzAM;ABmDG3<>J2np~B9|>v+ga2@>&-V2YF|INAT7u6nj! zHD7G{7;(qyqh&^3jSA25E=SbBia992Cpdlr{artM-p5&Ly~jO#9K7qipBBEzbn;We zpy8IUR3Om1xgItva9RJ#FJ`(M^;ZKGnVVzVUBd@eR%yic+Cv*<#2TxSrZ;e2zo6)- z-@gk`ylRU}W1NlI{rjcQ5kq=Zqxmh)okj|KNcphcxbTT{+3GL$sy1s4r{9x*2Qr>q z3!;+z^C^OPbK#Yb5Wg1R_eo}lD|n&vJC1wx-=nWK_c2|2{9I1`p&`JH93UiP&fa`B zCnorm?-LoOS$vkc;CVs;9^@pW?(==nrs%n*NXrf0V6|;)+qRq!O7YBn^!rIe3Zr(} z^M!rl4#ycOIlG@p7Bx`Eu*O#X+Ktv9`qD;jXFB_Ani+xHw?kP9ix{IzGGyBBF+gUQT~SaF3G&g=`e+GdM9Lm#b@y zSwJd2M2{&<6XDWo8n%aBu3_U=@s8VNqan@4-_BI?;perqA=tJobv8PQW*I(7HM99k z(CITCWxFhpe}%GbfcQ#Wo%=?$+qCCb+VmRpxmZDNbF0jE{Ws}as~lz;^Ox_rFc_2x z@vHC=iwIcNZut_u2OBdQ#4PV#|hLON4B=<*Lr-YcxjSOW9~B&)`-ldoqVMBq3UXRPxa($G2TE0 z*?SaP&*q2g*Ve{|ax=-xKGk|9gBze7p=r@qeuZWhwp6{6d)%QL6(iP0F-G!S zSS?NI_YF+dz;-mTmDY<{lHy8y-qEu7%g6}$CzV2@HX2ifyGpsAEm+f3#^~E zCAWj>L-e{$oU09~{`5`1k#vw{dT6|$E^k}bIZwx!$@-S@2*2!dw080XQ}t3`d@>Wn zI1v?^1!B_P7{@k`Ea9Qd6d@PXc&*S%X1iu_@bUr9NiHd(a6+%exnNwRgEE!(|S+#3c1@5j37$;_eOGv;m&+sXJ}a4wFMf zECSPfY3*^Iu+R3rXrsSFsy!J;g|mCo4p)mN?$=+By3+W4zINBpr!5w9g%=%sM=t{E z^}~WX{Lz!mS(_zZ#Y7RKS^Pm*>`{QPHEm1y4-M}2ILm`gX99uFcb|l1?y){Vp_2BG zFq<>`ykzghwyScwzj?O+d;voK4UY~?Uv3^P)(M-?rI_<%#-g3sESu&@dV?uNJJ?x2AS)C+0zw zSG{SL@6YSzIy44iIc|@vd73p;{E%l6m~@mGq{5#m_(UjczeDRQ*BMSucQg}y;-Y_p ze^gAw;$-8^=FG15gnf})fB1ov#7GRS<+woZav?7+zQL2Z;9K-11=GxCtb;|~#&+L4 zH@fd^%3rT|;CV>lTnpXKGKZPrBI0}3DvrBi@+9%3QNShg`?jU~1eY>QhbQI_!bJAU zB)HKdUx9`_{rdvurQXM%h3uZUT@9G+4@X}TxB0q>vq|5(?OgZ0^-r4Yt-A$R`5)-+ z-}FZHh{2>bss#JD?B(w%*i>GP@MQ@r7}DVM(%NkXK9?BJhH|S!|Cq3<8&T*~Sljot zO)5Dij(o)5vmx=z&ND$#iADWzpnU4RWM6{RERN2WSn$NhR7KJIg3SM;y|0XlD+tz{ z8QdWd+%*Ib8k|6o;DO-5Ex5Z3uEE`t5C|F^1|1xN2X}XO8DxjNw{Q2H{keN~|LmFj zbuG z-8OB@*wE?`oANoFy$$Cj;0CD$bF$T|PRs+hBU>iX(AwDaaz9OmrK4(ixu zVXNQj#b&^FpJx!ki(n#kKGgG4V|fM+gwc=PW2Ap7j7@uKyn7*Q*tdF7q(@p$3FH}o zqiNbrq*{SYnvqsMqn8efNmg?WCYmP1@rnW68Z8+y=Pk;}hOKyZofmRORO|rFSx=Je zz$Bdwhu)d^zQgw}0EY+Yu%bXfx5BFn)4l#kJ9ghtycbf@crE%)wyt`}d1aB-t4R!w zJ*vr0+H4=nycQ|;!+;e-d+%-J)rheBodOAAbXL1ZeXTXz7P-VOp@TU|@i-*lXo3s9 zYB?tdn=Cb-GJzCL`B$dcOyhCRFkxob%HeZ#!c{89*YFTJxjB7mI1*QV-NM?`P@4o_++5P^@2qT>{5ug z;srBvTwWc~ct974Lu=r0^uC-W>H9LKF-M;%*Uo_uN07j*5XOP_P1l|QnQO0c0V5bs zpU4>9`2>*0%MQ_B?$yr2WL+^c1rXvMxHS^A7{wGh`{aI1eEOCOt-Wf1>_`P-`_$vZ zfTa_v;ezuPZ}+-bm{Q7>Nx&}27PJtWS?$d8L&0fdC!7$NIlgD7|3Jtf`!#*5j7B+HjZb6jB(S?g)s(3c)W*^(;I#>>+i z`)YgTykSxY$aW7Oyo@$}UCe&>w6c&gVJqStvyUe+J->(v}I zEdiM5&cUhJ)F0(2jg-cd4mxpAZZC+Y-lYFHx3PTs^@?;~@t5^JzmtoGx89XAFDL=7 zYdh~3-|M`S>~6*I0+MXBVT#vg3bMdFI-A6+Mt!%d^btIMZ7;83^}GDo$2x={Nl*&$ zY51wi4!T|Y7!BU5Sj6a0cso})t0No1&ET1WK_BL+@4HrV6@+YQAu3T)G-xwud_7^? zfeD|<*O!-lArLH<`x6fl(dr*xJ8hSRd0w!W?poI3zD@JQA_bHmRg)^;sJeS0(7W+E zX5{p+j6$eone-^?f9u@y93=u}^VGGyr<@YEz0ml5M5fQTUgT!29PlRu^FHoZ)Lds< zHx7-gCL7o(`HP%6??fwxqU2KXDX)$hv9o{pQTYp0rxwP$dcsg|!In8Hm_->11nlV1 zCpA^kzX2$w@X0~>oENXm2lwOB799*MifW7t-tf+~d9B0qFZpm3v@270uiZApb#UxQ zhgMw;Qp>|xC(CZ-SQB!U7a#g_zNHk2><&46sp8k4x0OgMyV{oMz2vq8janNP8ZGR0 z@|_a+^Z|IZ!!<892Zc_t@4RZwvIb7fH@yL^QIj?Y6%!0fJ#T%d1g6=Jvo6zwpc%3G zTYF+RznPP3H~ephNzT`1(V8fi-+8dt5>!*9X?3n#PP@!s6TY!4b8#_R$>V2;%fRt6i-DDA5d-AwHQfkAQEMHj3N4xwseaqr$E$uDNbYOB-$xrs~EEwVO zzSXYO6%rYbXm#VCm#H-^o8bfZ{`afgTlP5=`YvaZFNJn32%QP#C*Oc_>S1 zv5(I=iIt5XB(cfNd8?npOdV{yWUFwvbn>&}=OXIfy9j)_m`5S*;FxCKfwQgaWj6?fq~!iAjr(u% zHpG^aiCypN0CTv^$2uV@F~pt(jQAm)|KrC5!;f-BF3c2h=3+}kCt=GX)|9>O2^>I( zOT4_UPr*~|So#A?S9qE;jk4Q988m6reR09U&vxKVGs7!`>Mi#oUAicqn>ikKufLOD zYY}H}nbhvoLUNWe8IHi5TJ zeOtuQKjQYJX#_aP3iH^@f0H5%Rwvw_P>6qJ_orOwBO{yWz|+(a`>``uvA=G|>S&k> z_xVt>|3x3kKH3bQ>!lj$lDzWD-vm=EChkosO_)ESJ-45yrPC6Ot3aL6na-ku-*4w^rrfd))?64OU=@_22FPAW`d_
mKIt0oo?A#S#hOC;-J~uI&Td-dCjCBu!nc<%n(mE=#E~G_7BT5-hH?bBrkKqy` zLDPZSa_S85sp={{iB&v<-B}F(hT)6dPx{x7Oe2{n2E>)heV>+2nhA4J@{Aga`7P>7 zkNA$;T9)ro1!2Uoi0O*I=&UCOPIQiNY{)sERx^JmGmQ_rb@j2hIBMP)jc*!LtA(*3V$E-<}M1E>LXRY zZiz;JNobbXRrrnemP(Av?r|un@E|j0=kg>CaRxQG2iL*w3Su{3>!0j(}9KX z$LGTer`sP~KL?-tTpYw=o>-A< zHpe?KvYkbE;lDQ~ab8d>as~0SI4EW~blJQE%1u8u+m+R0&GX*Nx**=`uJVP9T>I~z z{JI78wGmZ6+^w8d$99s0JF)uy0nj_(#39C@qS4p?l8d9x(jR#LruAwN={%mFwVomo zqFoc%QsD&qB!3V`N`%jVmI&=^JiZU7naG4|=iVe&^>s4W#f1Tna&8Wo9VndSG%mA| zid@46E?Xz3ilt zD*K9riDZ3_^$YU%3yC|u#N;d)QCd^cwGSU_E_ccLHh=3lxfNnU4`xiSP|^BmS~`R9 zPY}`F(njN*1Yec=6--075uPo2cBywS;493SHHLATUY~{ytJ~_Iei7#b?of}4JMsj% zg?Vx8GB@27pY9U{V2b-jzai>;fop1v<&8dI=9mMfGvnoy<+%zuVW73CW~yx!EnrT2 zDI$sqc#+GvAemjdl2NBdC1m-F@CW|iqQ7>_ZvclH#u)h=^H(m_5IsT$+RTSf4|Jru zxgEoMj_U`TyaPwxStY%4s*VM8D|ZeB$J58rbmG$)`xI3sLm#lP8zoZ-C$qFoEXapb zhFUSj2MCAOSbE&9OlN_=$}k`7!n4t%?Z=io#t5n20BltiFn-g^4c3VmWM~s=j*OJc zCl}lu#JlD*z`bUc5yqB^46?U(HTH^&KR*e>9b{{(Nf0f1QG0A9`ILMjxZCX_#diE{ zHTNkk0=48QPaazu-0g-z_<`k@6b>~C25t-2FUF?d>RD|xyH^m>~L*9Xdw_J4CsjHAn0BU+{_WlYmhu$n8?o%OfqC?CKpwr+$D9`&M1LI36 zN#DGTPf=LOru8n5l?YgX%lhYc6O0HjCiLC+MaF3-WH3gcL(^0zZ+YFeGlI`JcJ81v zY>vJuT|*6-dc0eV``o6p`fA%a_qd^QMEaL!VzAA2HSG6Vzl4yzIH4h91zTgG`E1>< z;g8lixDFH^L_G-A2rR&|o)U-v#Z2vK$>%8%=O>;iX;UhI40hL(m2B;ns0enJIK;tK zPd*3nZ$?fq-OR;<^R42d-Y;RCCbp(ZD?>^7zVO;=-XH5PO}u#UUaQiZ5v8oO??Fo+HT4=--fr5@Nan)zMjS9*t)*5Y z?A}7fr zCoYFDRIbOFv8U29pGE@CH~P6IhEKg#E##jFOJ@e$v1W*jXxTna#GJZs4*q4x(T=!! zq?mTe%rpYXT6$49o~^Gvz~`!-Z+HN59<0@ylCVS>apXJ+1qul*Yrnf}P2RK*m*cW3 zq<~iEV+w!AL4`cqq01xEm*od!n&d_6Jr>PR-VQTay%--;RyXO!#yg$m#2tyS;ClBy zsP!@A3+k5IjC#E?%%oFNnd)l>x6Ng_{33Cxr2o@Nhvn@jUAtYd7t_AS0Ck=!IE6Vf zL^HSr=5hb#3oR1t;)4!4pv#+vGIT=BpK#|MeX@x&5fiT9{^-1iKQ?1L<>X6G z$FW(wFs10#0Gbwi`!RI-0E`lRP9W}h4x;t-i(xR6eli+cTWud6bYD^0*of zc()(wx}BFp$Qbf6WzTXYVxQVzu<@-`x*u-YfUmbB-gtvBBvZf^#oAQ^xTH_c3poaT zMiumHBG)f4&A?&5_xL9~$g)SP(DXP#lhozQ}&rR>>_}2`B!p?z;}@eyxVwF!OJUeawmF#Iu3lqyj z)T@gtm^p{oYce9M_r~{ThKoHu;Pkb9_|pDb_Z>AhTu&TTK9bYKeS{CiN1cj4DY)T5 zaMdJFB9KANCxAa4Nra_U42b`F5{01~55)W)9{Ko*RAPe`AOQE=cS*=O28(}yzcpn4 zf0O^W`!e7Ig33EeCbbM@GkJK-^9^W20Aly^FMy!JLSTU^c=_%H=p8i$JgS$tzR{Qr zFWg0G0qE%bci9Xz4u0|FvIi&T=k*>|s{BvHXxIDC&A8BV8bg$ZgJ7-9tJR~M>EAY8 z@M1zd-HzS~(x{X_N5LGjM9u$|@Kbrml4t5v;B(WBOGNb6o0AzH8q0<=Y_o)54=2JN zA7e{--DGZ0RymLL1-YJUo8!T2AKWM%!Q798tsLlARD-EPPc}{tS*6YK)Ote1Kj2cs z!^{Jxar;2Xu~?%C)^&N2KCK2f)JXA=JSQP?ZKl}0X0qKE6BB^Ra1n86k+%^y@D?IwlAc4bp{Q}48*fS;P$Xkg zb8bcjGhbQ*?3R5ITfq8pVL)gMg20)Gca8C|!;P*1T*w+C(D1_(B}6eMaeqVj=K;`0 z*8Fej^+~3B4#|EDf@=2LI%VnklV=rb)y=c{*etmQw;>Qmz!%QS>AG@y zlumnr)AoGVHKL%Hrl6gRrkD5I3I_JeSFWn#OJ0D%-mS&3XiZjHN-s1YvQrGB$L}a8 z9sdSCPXyOt;Q{nk(e8Ql6PbBo8sx8#h?!02m$~`#j+SE&^${)P7Ci3=;bGfa_^40- zQ~3khM(b{)c%&4A{=_pBv^GEm1WQ8<`^ zvA+NGL;4!<1Uj`CrdVm}4f-N6mB+D?d(wj5u1)YC&>15*IKe<7^AT(G{8eD;d63~q z-KE+@juo~8Y74-8a<7)0xsT?gD>lTUVKtZ;ZRa0CAq>2}*W33Dm|(0g9Kgf@>Ufc!pf{)nmF_v;JgtF2z_{@*f+Nn z?nE%er1HktdAl=&vb6PcW;OlrW<&BF{gVQBVD@ueLW*aMhKS;DLemB(L_tY2vAF5l zI02A?{w5nDr-ajEOar9E$MzFZfI^5S|Bj13*TD&h%UpRaAb*qqSB|%z6^ls$(mt4y zNG2g!+Qwdy46us4TUs}NPyivL&L@KTe|)HbP6-S5hznqjglagPL4kdQv6>W+1AQyO z)Pv0Fw_U-O2vZFroyDbH+u3u+ zmbttSm0#||rJZZU9|)&m)Wc{4YlG5Q7LG}d2Lvv-QHL+XlL^NYpH-g+bZ}x4E7o#~ zauU7F@ltWuXKBL+H{RMeQ$%QLxT)T#dd{K7Ex5pDOZdYpu<)D55Pzq&I_ zV6h8?ydnuYTqwq=J=iU`eU+b1AjA@pv=Mpu`Q}v^`EEB}PaYet2WhqA;Ou+8b%?XR z`yMsS?QK$XTZk~H!Zw5v{}^O~(B67nj&j?wuyh(LI(?W~zY3bi)t7Ww$GJeYggoC% zmkc<|@kkURrDRLj+s6w>MbSNj&-#=5@DoZLG zcaCWvaHub+Ik{_$2`q^Jv|TX6aWf2{n2TX=%I@|N6XK(F>QS_1mTzUTs-oNx5K#t& z(?dS*y0S81f2Dav5`g>9vX>8_6B(aDq0kh471Thi(TgA9?i?L&5J^G$5mp^G(9ACu@@B*!HiaW5kXwD(f2%eJ#FS zlecdp|KM9*J^yu<71;Edp949CuRh*@%h(V{M|+PB1v2;P;1Xh=a>xsAfI@T?UT7YF z?4(Tmdk+A0O_&j=O`vh3RNL7rn`Doy8B2sP>-~*%un?{WEga{kfw!Vow=Cm<$m(xs z=y8iLqe;mnV#1;lZ#;)3c(Vdb5`^Z*zca+9m-0bzTSJC2G@r)CrY%wOsI9!z%Mwq0 z@7Xun$njQ-lS-R~a1fBem1+3GzRQygw_HZ+>u4CX7WH;9fEo{U7zw2(ppqs=Yl~fn zAq7iPFIVq~&i@05`mFo|h=Oaqn?JfUiMA)lt1gq@oCs3N>un7I)UEzN5Dpsh3~xXp zp_F7Oo;p!~$Z7{(D{~+1rbKBtQ4m>c+a1(h>r`XaAlA!nbzVf8 zk77`B#7!;YoDewD`G3yJ;Q;_Z&d*sn2pGvrvmtZHvrEYs$xjbqPe>0>$!xG{KGgX;o{Bb4icId}rNF?nA@jO|O)%hOBsUh{zAG;>3S(?E6N zkKfuXa2f+nhdNZGXO6o)7f0u1hPb%b{wR$i;t%9T=V9}y^8E%@vt#28f^%V}Wu|9j zXWns+@eEF5!0Gnd zsXqfdkR*7v20FZW17vn&qBA@#@VTkx>E@A^!rDZ5E(uEf*Z7#Y!~{4yWH{3_IO{;T z7;t%#;X*x&76BJ63b?Zr0msVkEJZB?mg1L@SC*HbkI-e5rNyPi=OcI-ZRy}*|Lk!6 z;u-XhzI3s*b9M~>ZNifS&=)U`cdyTnPXAG8i{}UM|Bi3=;04hZFLw9NPtFeK;aLo* zOZ(^hC;J;a@GJo2|7dwB^uM?zzUDk?ey0v zYBT^R{%1r!{=hri^E6^k|nxa${$eERqKw|z%T`si(O}auOt9cMGbmQgjO0v z)l^{S_+d`ZtvF9gRyX0wss2xq^k-aS@l`BAWjWoKp#)w8fvmYm=0Cj@R$qn~1^B8P zy(!jM$YOa9%IRUY3dc^6WFs|~1TEBDr)4HnW_YJYefSvGfu4r}o3Hgx?U*M3w0@)P zM$#6=0Ha9>uVb_6O`+5G#WX*dhPiEtxSvD_FsV}aY zI_#i1Btn@`D5T#bv=&EAY->8+UcchplZsa^v5lKF0-hr;Bp>1zG=+STyS6h!MylDc zcn>=6C_@1HWTV_GTUxLDpayf$mA(OTSNs4jCmQM?n~0-0(|=bcc2H|{-??7dUzmT{ z`U9Lt4?b3`wDLbeMBLB_c|d0{(kI+1moEpNOmayL9$maX10u=3D*&`cSNuW3Y=5CZ z1u&_&O2g2{!W4enNPNxWBNbt%Za5kygPMSY0cJ>BLhX5^99bq&??%@XfA8FsY$=W= znlnLEhuEKrggGATT^jOshTCi=#5ugN*gyYHzYvNQz%ZPO7WtWs6KQ^5c#0ei#yWb; zQs;~Q2}WRj`OtV6#Y66LwAF=Zw32GTPF%+y^mfLbOS1GtdeYOITHG)Gce|TVT2PBC zP$&WM0i9 z&495GygaQ>IJJswxTtX%-_wKw0Nq_8Wvh#&&|>zb(mKoN5!1RqsJVPRYc z1(aX#YDIv^hSiv$DET?il?|dm3{NxHg5mJp@ zYv{<8W~zIk=-L~d(1w=v+a_LXM^R!bPW_%zb^R%C3J?Ge&$x6yNPg)W zlIz_>_ZQVMQU!g9IzsRK{#_~>m4T?VN~b;#zs5u?L<`H!ujY_h2@5?eL%nqhYm@C^WF zww4}rC6BUnN}j%d#CiudZ;_XO_=s7Q+}&dLITkiimbtLp=3Ko;oQmc+&un`Q(C~B~ zKWn|)sLcMVi`t_b9ye5FerYBGXsjw5-j;iTEAym4bmCrb@76N+cD8QiAZd{P~>7l<5z-7V1IZDSp+1kgE}JAB}J^ ztsXwI_f9MrAh2e68rsWb2U%FmtLzFP@s%%3Udx{-wYwUNwR3SAq*m#~b}y85n9dAa zxJA}yRIP`{^iBb_yxoQ~_nIcocBWNp?YxG2Kf5a$Y@+2`=V}UKd45}}m>ZUkPoMIY zvE5#8uwgmYOz@J{KAo0d9xd5tj}~5x&gq#?P+`WNXt!!L6ewCZE#5tPj9R=N?DW0q zxjc&afgjUOyKVJ*_JVc0&IC=or2SQ_u=kYjZQEYcs#j?H&SNJ(?^G$Oiq7?Q%x4Gx z#~V4Z7ffRHzCwH#jj;+LSwar9C=L&{QJVF7z>4?YV9IO`F~Dft;JpAR|)&JFwG zh@ENLt?i6ui{vijqNm(h! zUtM{7z57tOUfN$fD_}Z3mFBWVp|fkScN4<|{ixZXL8TvR2WX%a@tBe+7<;6SvnVCi@3`Y*=Pfm`|iC+{4 zq?71tG6Vx znm-cGGk6Te{(4JGQ6@sxvzeJ*{d6+yD$4uCNAJrS+B3c3a{m8)M#^< z#6N0~w!IUgPzDreGV!GUogY%Gz0+t<5qbAZA4A@m9sn}MLEu1ot(@BihhsMBt~@=~ zd3+4z!IhG`KcK{yQouMj;3i_(X|#I9RS#7#nc5s;_V$=9 zkonbClHTAovLy!|OS5@fG|zvuTK#p9Mb-}h@a&D@JrWbGVLN>tKkc2K1EZr%BBiFh zU;SlZ*g=aeJErie16)(L^b;Rn=U0{X2%_Kd>(>4<9`qiw9M_6hA*V7d52EKUo?KXg zob*nyTRUi9y9nb>23MR>q)jcoRdmHr64`@GM=RQ={^VN;%T-k4?T1LBCAl6ihib_u>n;1adY%bg4 zaIVjJumOe3q~Ucl1ep76tM{Vx<*0pX7#HZm%I(y3zj2Ymp4?^H{^)X(v>y)7&9Zp3 z|NC34!n#>&pnWGbo^i;XxD8_h4WYRaq?Yit~G`NI_lNpNC0OVkVefrjA$&&ui>@t>g>nB zC-K)djvnAIFYTy%naQ4DSo- zCv=bn4of4(qYPnTv<=5&q07OXN}v?TrXcvYMpWx{8QJ|EFeL(S`U86-_AV{erX*`$ zkL@y3uHa$IfSC^K-<_j^PulW$%aw?n&{jXwg$I>9UZ+mtWL?O%k^-!oXrqLw)fEGC z;clHH8U`du@P?(!F4tJENfD9k3#vY3@WE!~?7M@Hz$Yz6-0@64 zCxi8?o&1IMb>|~)*oensjhCLtO76scm*dej?<)7J6;H&4Qg$p1ozU6 z{Hn^^AF}s7K&44E!SPEfAEPEqKbMVO_v%?n1qh(fSC%8;7#7WXjW}2C&3)In7r=!o zuy>ujS@xyV=$KE)^-1Dx}IeJBo|q{bCPCB(JFT&W6bm;|j^137W2D=EwB$0Diq z^)C}7r4d1>+74!h(gq`JvuHt#7W-Al0mKwumiDKfaZ$T@^^p4M-)w@=YY zW4sQR+W*A;L@KVn+0XFR59^MP)PRa2(IP}+z5C#!X|WTb(@1J$Cr3}N4Ig3JCAGCI zx!z?Yy-}aTUwWJhmb}i$vVM*-_%$AgLd8T<+WK3|L=#s|Y=|w_TZ(rd0^Qk8RZcS$9bN)FKHw7SD7=h5TAl((tUh;cMNx-E-V!VaPY8z3wsDP!vo7m|KD^C(hWg z5LZZ=8c#KxdG(0|TcD(9OFhDfs?MbN7kxrL22m1iM)Do`LUKwe3$nfVP=xW0v(UoJ z*`d)&2}3@t+pm^g2#*{W-**iBx09GKw{_wwXR#=bw1_1-(FMUq9>MUI+?79v~+y3Sy#X>4Rc2A-eWgRVCki?taC3$ZO-X? zt)F&tE;WBqELjI0H?>wkXhD7I$KoI-N?Q9+vWEM{K`JSizQ-RC>fM)iB%OOaz4Y2z^$hc|n)+UE%r znbucE-<9WT5h6)>d`8=w>kA7u;5C&4Kyp+`7<5WX9I{MH#OTPWC#pAzT&gj zD2Tp{5;Z?=74rF3G~`Kvx#BS=lY@nDT4v66qRjvvc!#q@SnPVc^ZkC3-j)f_6NtF5 zZDBB^Uy29B@m&PD|H5g|!Po^>Pf8_zdB;-XwI|1YHX*-!C(G})%{+ts{oS1pBIR<$DJJAS+`OnlN-m3hr zTPS|1T)Aany2BEF220*?Bw6u9xz={KzXGD)HxAqG=^q+`6XR`Ym{wNVF zQp0&o9RR4LIJ>Y;6Wys~kHG9`Ww|8}dSqri?vZ)=MM|ZyQf35uXO|PLGSLXPXep6R zDpGckES`LWi^)bks3VK-Mwll_-Y>}HgNkfM^A@Q~CP0R$DTZED#6h*a0f%od&IA2j6Uot>K+a}#|K?drk z!vY>45~F0av;Yd?BYDnATZ3A16N>2`{1t7kc360^SScr;gWb9vgD1TzfU6^ox^C9$ zhPN4DKy0@_VNx8MjjmIH>>T`{?snumcD!#IEcr`HRl8d1dVgd2Rov7xu0M^ z=;9m^*~bIi#ws&r!8_j@9P2CE-{jZrnJxnuK3EVU@9i=e)O26jO4_j%yshZKLVv}m zf(y^lkHedLg)ArlW?Fq4vIyD*V3v^CL(wz`?L(-oI&7K z@`t09qeDU8${IxWOJuG-21Vi|Zxy!BcRqLEI{1u%5=e{5%z1)ZTrKqJ|3;~Ze3qrvadY>DZg)pWYa_7GsOSl Gz5Z_sE#UG1 literal 0 HcmV?d00001 diff --git a/test/fixtures/test-app-yarn-hoisted/build/icon.ico b/test/fixtures/test-app-yarn-hoisted/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..66c8e1745d2aa9b85c47c0925eba14e9c7be0a30 GIT binary patch literal 370070 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/test-app-yarn-hoisted/package.json b/test/fixtures/test-app-yarn-hoisted/package.json new file mode 100644 index 00000000000..aba7a0796d3 --- /dev/null +++ b/test/fixtures/test-app-yarn-hoisted/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "build": { + "electronVersion": "23.3.10", + "appId": "org.electron-builder.testApp", + "compression": "store", + "npmRebuild": false, + "mac": { + "category": "your.app.category.type" + }, + "squirrelWindows": { + "iconUrl": "https://raw.githubusercontent.com/szwacz/electron-boilerplate/master/resources/windows/icon.ico" + } + } +} diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index edc0d75ab46..8327dec325b 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -1383,3 +1383,8 @@ Object { }, } `; + +exports[`pnpm without hoisted config 1`] = ` +Object { + "linux": Array [], +} \ No newline at end of file diff --git a/test/src/HoistedNodeModuleTest.ts b/test/src/HoistedNodeModuleTest.ts index 5af779d1bae..138f76c4a72 100644 --- a/test/src/HoistedNodeModuleTest.ts +++ b/test/src/HoistedNodeModuleTest.ts @@ -1,5 +1,7 @@ -import { assertPack, linuxDirTarget, verifyAsarFileTree } from "./helpers/packTester" +import { assertPack, linuxDirTarget, verifyAsarFileTree,modifyPackageJson } from "./helpers/packTester" import { Platform } from "electron-builder" +import { outputFile } from "fs-extra" +import * as path from "path" test.ifAll("yarn workspace", () => assertPack( @@ -51,3 +53,62 @@ test.ifAll("yarn two package.json w/ native module", () => } ) ) + +// test.ifAll("yarn pnp with hoisted config", () => +// assertPack( +// "test-app-two-native-modules", +// { +// targets: linuxDirTarget, +// }, +// { +// packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), +// } +// ) +// ) + +// test.ifAll("yarn pnp with hoisted config", () => +// assertPack( +// "test-app-two-native-modules", +// { +// targets: linuxDirTarget, +// }, +// { +// packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), +// } +// ) +// ) + +test.ifAll("pnpm without hoisted config", () => + assertPack( + "test-app-pnpm-hoisted", + { + targets: linuxDirTarget, + }, + { + isInstallDepsBefore: true, + projectDirCreated: projectDir => { + return Promise.all([ + modifyPackageJson(projectDir, data => { + data.dependencies = { + "es5-ext": "0.10.53" + } + }), + outputFile(path.join(projectDir, "pnpm-lock.yaml"), ""), + ]) + }, + packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), + } + ) +) + +// test.ifAll("pnpm with hoisted config", () => +// assertPack( +// "test-app-pnpm-hoisted", +// { +// targets: linuxDirTarget, +// }, +// { +// packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), +// } +// ) +// ) \ No newline at end of file From f3cb2163d233fec44c55aa13b120b6fa2fce8c81 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 9 Oct 2024 22:46:03 -0400 Subject: [PATCH 70/85] fix ut --- .../test-app-pnmp-hoisted/app/package.json | 9 ----- .../test-app-pnmp-hoisted/app/path/app.asar | Bin 714 -> 0 bytes .../test-app-pnmp-hoisted/build/icon.icns | Bin 34120 -> 0 bytes .../test-app-pnmp-hoisted/build/icon.ico | Bin 370070 -> 0 bytes .../{app => }/index.html | 0 .../test-app-pnmp-hoisted/{app => }/index.js | 0 .../test-app-pnmp-hoisted/package.json | 14 +++++++ test/snapshots/HoistedNodeModuleTest.js.snap | 38 +++++++++++++++--- test/src/HoistedNodeModuleTest.ts | 5 ++- 9 files changed, 50 insertions(+), 16 deletions(-) delete mode 100644 test/fixtures/test-app-pnmp-hoisted/app/package.json delete mode 100644 test/fixtures/test-app-pnmp-hoisted/app/path/app.asar delete mode 100644 test/fixtures/test-app-pnmp-hoisted/build/icon.icns delete mode 100644 test/fixtures/test-app-pnmp-hoisted/build/icon.ico rename test/fixtures/test-app-pnmp-hoisted/{app => }/index.html (100%) rename test/fixtures/test-app-pnmp-hoisted/{app => }/index.js (100%) diff --git a/test/fixtures/test-app-pnmp-hoisted/app/package.json b/test/fixtures/test-app-pnmp-hoisted/app/package.json deleted file mode 100644 index 9684a4ec8fe..00000000000 --- a/test/fixtures/test-app-pnmp-hoisted/app/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "private": true, - "name": "TestApp", - "version": "1.1.0", - "description": "Test Application (test quite \" #378)", - "author": "Foo Bar ", - "license": "MIT", - "homepage": "http://foo.example.com" -} diff --git a/test/fixtures/test-app-pnmp-hoisted/app/path/app.asar b/test/fixtures/test-app-pnmp-hoisted/app/path/app.asar deleted file mode 100644 index 2967fe1b48409aac2a1670c780622d8b89fe8a1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 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 Gz5Z_sE#UG1 diff --git a/test/fixtures/test-app-pnmp-hoisted/build/icon.ico b/test/fixtures/test-app-pnmp-hoisted/build/icon.ico deleted file mode 100644 index 66c8e1745d2aa9b85c47c0925eba14e9c7be0a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370070 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 diff --git a/test/fixtures/test-app-pnmp-hoisted/app/index.html b/test/fixtures/test-app-pnmp-hoisted/index.html similarity index 100% rename from test/fixtures/test-app-pnmp-hoisted/app/index.html rename to test/fixtures/test-app-pnmp-hoisted/index.html diff --git a/test/fixtures/test-app-pnmp-hoisted/app/index.js b/test/fixtures/test-app-pnmp-hoisted/index.js similarity index 100% rename from test/fixtures/test-app-pnmp-hoisted/app/index.js rename to test/fixtures/test-app-pnmp-hoisted/index.js diff --git a/test/fixtures/test-app-pnmp-hoisted/package.json b/test/fixtures/test-app-pnmp-hoisted/package.json index aba7a0796d3..4138b1fc710 100644 --- a/test/fixtures/test-app-pnmp-hoisted/package.json +++ b/test/fixtures/test-app-pnmp-hoisted/package.json @@ -1,5 +1,13 @@ { "private": true, + "name": "TestApp", + "productName": "Test App ßW", + "version": "1.1.0", + "homepage": "http://foo.example.com", + "description": "Test Application (test quite \" #378)", + "author": "Foo Bar ", + "license": "MIT", + "main": "index.js", "build": { "electronVersion": "23.3.10", "appId": "org.electron-builder.testApp", @@ -8,6 +16,12 @@ "mac": { "category": "your.app.category.type" }, + "linux": { + "category": "Development" + }, + "deb": { + "packageCategory": "devel" + }, "squirrelWindows": { "iconUrl": "https://raw.githubusercontent.com/szwacz/electron-boilerplate/master/resources/windows/icon.ico" } diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index 8327dec325b..1930d62a829 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -73,6 +73,39 @@ Object { } `; +exports[`pnpm without hoisted config 1`] = ` +Object { + "linux": Array [], +} +`; + +exports[`pnpm without hoisted config 2`] = ` +Object { + "files": Object { + "index.html": Object { + "offset": "0", + "size": 378, + }, + "index.js": Object { + "offset": "378", + "size": 619, + }, + "package.json": Object { + "offset": "997", + "size": 232, + }, + "path": Object { + "files": Object { + "app.asar": Object { + "offset": "1229", + "size": 714, + }, + }, + }, + }, +} +`; + exports[`yarn several workspaces 1`] = ` Object { "linux": Array [], @@ -1383,8 +1416,3 @@ Object { }, } `; - -exports[`pnpm without hoisted config 1`] = ` -Object { - "linux": Array [], -} \ No newline at end of file diff --git a/test/src/HoistedNodeModuleTest.ts b/test/src/HoistedNodeModuleTest.ts index 138f76c4a72..5ad2372a856 100644 --- a/test/src/HoistedNodeModuleTest.ts +++ b/test/src/HoistedNodeModuleTest.ts @@ -80,7 +80,7 @@ test.ifAll("yarn two package.json w/ native module", () => test.ifAll("pnpm without hoisted config", () => assertPack( - "test-app-pnpm-hoisted", + "test-app-pnmp-hoisted", { targets: linuxDirTarget, }, @@ -101,6 +101,7 @@ test.ifAll("pnpm without hoisted config", () => ) ) + // test.ifAll("pnpm with hoisted config", () => // assertPack( // "test-app-pnpm-hoisted", @@ -111,4 +112,4 @@ test.ifAll("pnpm without hoisted config", () => // packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), // } // ) -// ) \ No newline at end of file +// ) From 7bdeb9d1fcff1a447b9a0f08c98d3b9826fd87f2 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Wed, 9 Oct 2024 22:48:44 -0400 Subject: [PATCH 71/85] format code --- test/src/HoistedNodeModuleTest.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/src/HoistedNodeModuleTest.ts b/test/src/HoistedNodeModuleTest.ts index 5ad2372a856..a4d20649a60 100644 --- a/test/src/HoistedNodeModuleTest.ts +++ b/test/src/HoistedNodeModuleTest.ts @@ -1,4 +1,4 @@ -import { assertPack, linuxDirTarget, verifyAsarFileTree,modifyPackageJson } from "./helpers/packTester" +import { assertPack, linuxDirTarget, verifyAsarFileTree, modifyPackageJson } from "./helpers/packTester" import { Platform } from "electron-builder" import { outputFile } from "fs-extra" import * as path from "path" @@ -90,7 +90,7 @@ test.ifAll("pnpm without hoisted config", () => return Promise.all([ modifyPackageJson(projectDir, data => { data.dependencies = { - "es5-ext": "0.10.53" + "es5-ext": "0.10.53", } }), outputFile(path.join(projectDir, "pnpm-lock.yaml"), ""), @@ -101,7 +101,6 @@ test.ifAll("pnpm without hoisted config", () => ) ) - // test.ifAll("pnpm with hoisted config", () => // assertPack( // "test-app-pnpm-hoisted", From 7b58b83aab9d3f4772c6b2bb2cc5a940ba3a43a7 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 12:11:17 +0800 Subject: [PATCH 72/85] fix ut --- test/snapshots/HoistedNodeModuleTest.js.snap | 28 +++++++++++++ test/src/HoistedNodeModuleTest.ts | 43 +++----------------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index 1930d62a829..ba36fb73133 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -1416,3 +1416,31 @@ Object { }, } `; + +exports[`pnpm without hoisted config 1`] = ` +Object { + "linux": Array [], +} +`; + +exports[`pnpm without hoisted config 2`] = ` +Object { + "author": "Foo Bar ", + "description": "Test Application (test quite \\" #378)", + "foo": Object { + "bar": 12, + "disabled": false, + "existingProp": 22, + "updated": true, + }, + "homepage": "http://foo.example.com", + "license": "MIT", + "name": "TestApp", + "private": true, + "productName": "Test App ßW", + "rootKey": false, + "rootKeyN": null, + "rootKeyT": true, + "version": "1.0.0-beta.19", +} +`; diff --git a/test/src/HoistedNodeModuleTest.ts b/test/src/HoistedNodeModuleTest.ts index a4d20649a60..a8f0043644d 100644 --- a/test/src/HoistedNodeModuleTest.ts +++ b/test/src/HoistedNodeModuleTest.ts @@ -2,6 +2,7 @@ import { assertPack, linuxDirTarget, verifyAsarFileTree, modifyPackageJson } fro import { Platform } from "electron-builder" import { outputFile } from "fs-extra" import * as path from "path" +import { readAsarJson } from "app-builder-lib/out/asar/asar" test.ifAll("yarn workspace", () => assertPack( @@ -54,30 +55,6 @@ test.ifAll("yarn two package.json w/ native module", () => ) ) -// test.ifAll("yarn pnp with hoisted config", () => -// assertPack( -// "test-app-two-native-modules", -// { -// targets: linuxDirTarget, -// }, -// { -// packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), -// } -// ) -// ) - -// test.ifAll("yarn pnp with hoisted config", () => -// assertPack( -// "test-app-two-native-modules", -// { -// targets: linuxDirTarget, -// }, -// { -// packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), -// } -// ) -// ) - test.ifAll("pnpm without hoisted config", () => assertPack( "test-app-pnmp-hoisted", @@ -96,19 +73,9 @@ test.ifAll("pnpm without hoisted config", () => outputFile(path.join(projectDir, "pnpm-lock.yaml"), ""), ]) }, - packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), + packed: async context =>{ + expect(await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/d/package.json")).toMatchSnapshot() + } } ) -) - -// test.ifAll("pnpm with hoisted config", () => -// assertPack( -// "test-app-pnpm-hoisted", -// { -// targets: linuxDirTarget, -// }, -// { -// packed: context => verifyAsarFileTree(context.getResources(Platform.LINUX)), -// } -// ) -// ) +) \ No newline at end of file From b0db42612c569e86e9ecc6c2d6cbfd6b2ee1e132 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 12:16:32 +0800 Subject: [PATCH 73/85] udpate snap --- test/snapshots/HoistedNodeModuleTest.js.snap | 67 +++++++++++++++----- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index ba36fb73133..a213b34571d 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -1425,22 +1425,57 @@ Object { exports[`pnpm without hoisted config 2`] = ` Object { - "author": "Foo Bar ", - "description": "Test Application (test quite \\" #378)", - "foo": Object { - "bar": 12, - "disabled": false, - "existingProp": 22, - "updated": true, + "author": "Mariusz Nowak (http://www.medikoo.com/)", + "dependencies": Object { + "es5-ext": "^0.10.64", + "type": "^2.7.2", }, - "homepage": "http://foo.example.com", - "license": "MIT", - "name": "TestApp", - "private": true, - "productName": "Test App ßW", - "rootKey": false, - "rootKeyN": null, - "rootKeyT": true, - "version": "1.0.0-beta.19", + "description": "Property descriptor factory", + "devDependencies": Object { + "eslint": "^8.57.0", + "eslint-config-medikoo": "^4.2.0", + "git-list-updated": "^1.2.1", + "github-release-from-cc-changelog": "^2.3.0", + "husky": "^4.3.8", + "lint-staged": "~13.2.3", + "nyc": "^15.1.0", + "prettier-elastic": "^2.8.8", + "tad": "^3.1.1", + }, + "engines": Object { + "node": ">=0.12", + }, + "husky": Object { + "hooks": Object { + "pre-commit": "lint-staged", + }, + }, + "license": "ISC", + "lint-staged": Object { + "*.js": Array [ + "eslint", + ], + "*.{css,html,js,json,md,yaml,yml}": Array [ + "prettier -c", + ], + }, + "name": "d", + "prettier": Object { + "overrides": Array [ + Object { + "files": Array [ + "*.md", + "*.yml", + ], + "options": Object { + "tabWidth": 2, + }, + }, + ], + "printWidth": 100, + "tabWidth": 4, + }, + "repository": "medikoo/d", + "version": "1.0.2", } `; From 43e0c960bd883ff25e645cb0fe2ed3db65b5c82b Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 12:29:01 +0800 Subject: [PATCH 74/85] add ut --- .../index.html | 0 .../index.js | 0 .../package.json | 0 test/snapshots/HoistedNodeModuleTest.js.snap | 19 ++++++++++++ test/src/HoistedNodeModuleTest.ts | 31 +++++++++++++++++-- 5 files changed, 48 insertions(+), 2 deletions(-) rename test/fixtures/{test-app-pnmp-hoisted => test-app-hoisted}/index.html (100%) rename test/fixtures/{test-app-pnmp-hoisted => test-app-hoisted}/index.js (100%) rename test/fixtures/{test-app-pnmp-hoisted => test-app-hoisted}/package.json (100%) diff --git a/test/fixtures/test-app-pnmp-hoisted/index.html b/test/fixtures/test-app-hoisted/index.html similarity index 100% rename from test/fixtures/test-app-pnmp-hoisted/index.html rename to test/fixtures/test-app-hoisted/index.html diff --git a/test/fixtures/test-app-pnmp-hoisted/index.js b/test/fixtures/test-app-hoisted/index.js similarity index 100% rename from test/fixtures/test-app-pnmp-hoisted/index.js rename to test/fixtures/test-app-hoisted/index.js diff --git a/test/fixtures/test-app-pnmp-hoisted/package.json b/test/fixtures/test-app-hoisted/package.json similarity index 100% rename from test/fixtures/test-app-pnmp-hoisted/package.json rename to test/fixtures/test-app-hoisted/package.json diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index a213b34571d..961b908d841 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -1479,3 +1479,22 @@ Object { "version": "1.0.2", } `; + +exports[`yarn parse-asn1 1`] = ` +Object { + "linux": Array [], +} +`; + +exports[`yarn parse-asn1 2`] = ` +Object { + "author": "Mariusz Nowak (http://www.medikoo.com/)", + "dependencies": Object { + "es5-ext": "^0.10.64", + "type": "^2.7.2", + }, + "description": "Property descriptor factory", + "repository": "medikoo/d", + "version": "1.0.2", +} +`; diff --git a/test/src/HoistedNodeModuleTest.ts b/test/src/HoistedNodeModuleTest.ts index a8f0043644d..a48785ad1a1 100644 --- a/test/src/HoistedNodeModuleTest.ts +++ b/test/src/HoistedNodeModuleTest.ts @@ -55,9 +55,10 @@ test.ifAll("yarn two package.json w/ native module", () => ) ) -test.ifAll("pnpm without hoisted config", () => +// https://github.com/electron-userland/electron-builder/issues/8493 +test.ifAll("pnpm es5-ext without hoisted config", () => assertPack( - "test-app-pnmp-hoisted", + "test-app-hoisted", { targets: linuxDirTarget, }, @@ -78,4 +79,30 @@ test.ifAll("pnpm without hoisted config", () => } } ) +) + +// https://github.com/electron-userland/electron-builder/issues/8493 +test.ifAll("yarn parse-asn1", () => + assertPack( + "test-app-hoisted", + { + targets: linuxDirTarget, + }, + { + isInstallDepsBefore: true, + projectDirCreated: projectDir => { + return Promise.all([ + modifyPackageJson(projectDir, data => { + data.dependencies = { + "parse-asn1":"5.1.7" + } + }), + outputFile(path.join(projectDir, "yarn.lock"), ""), + ]) + }, + packed: async context =>{ + expect(await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/asn1.js/package.json")).toMatchSnapshot() + } + } + ) ) \ No newline at end of file From 5368fa32b402fa828a24fb5d00de1e2ba966c15b Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 12:36:17 +0800 Subject: [PATCH 75/85] update snapshot --- test/snapshots/HoistedNodeModuleTest.js.snap | 27 ++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index 961b908d841..4f0be377998 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -1417,13 +1417,13 @@ Object { } `; -exports[`pnpm without hoisted config 1`] = ` +exports[`pnpm es5-ext without hoisted config 1`] = ` Object { "linux": Array [], } `; -exports[`pnpm without hoisted config 2`] = ` +exports[`pnpm es5-ext without hoisted config 2`] = ` Object { "author": "Mariusz Nowak (http://www.medikoo.com/)", "dependencies": Object { @@ -1488,13 +1488,24 @@ Object { exports[`yarn parse-asn1 2`] = ` Object { - "author": "Mariusz Nowak (http://www.medikoo.com/)", + "author": "Fedor Indutny", "dependencies": Object { - "es5-ext": "^0.10.64", - "type": "^2.7.2", + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", }, - "description": "Property descriptor factory", - "repository": "medikoo/d", - "version": "1.0.2", + "description": "ASN.1 encoder and decoder", + "devDependencies": Object { + "mocha": "^2.3.4", + }, + "homepage": "https://github.com/indutny/asn1.js", + "license": "MIT", + "main": "lib/asn1.js", + "name": "asn1.js", + "repository": Object { + "type": "git", + "url": "git@github.com:indutny/asn1.js", + }, + "version": "4.10.1", } `; From 4d6f7860f4006326611025dbec00eb3fdd72f64d Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 01:04:39 -0400 Subject: [PATCH 76/85] add ut --- test/snapshots/HoistedNodeModuleTest.js.snap | 199 ++++++++----------- test/src/HoistedNodeModuleTest.ts | 51 ++++- 2 files changed, 127 insertions(+), 123 deletions(-) diff --git a/test/snapshots/HoistedNodeModuleTest.js.snap b/test/snapshots/HoistedNodeModuleTest.js.snap index 4f0be377998..01aec04e26a 100644 --- a/test/snapshots/HoistedNodeModuleTest.js.snap +++ b/test/snapshots/HoistedNodeModuleTest.js.snap @@ -73,36 +73,102 @@ Object { } `; -exports[`pnpm without hoisted config 1`] = ` +exports[`npm tar 1`] = ` Object { "linux": Array [], } `; -exports[`pnpm without hoisted config 2`] = ` +exports[`pnpm es5-ext without hoisted config 1`] = ` Object { - "files": Object { - "index.html": Object { - "offset": "0", - "size": 378, - }, - "index.js": Object { - "offset": "378", - "size": 619, - }, - "package.json": Object { - "offset": "997", - "size": 232, + "linux": Array [], +} +`; + +exports[`pnpm es5-ext without hoisted config 2`] = ` +Object { + "author": "Mariusz Nowak (http://www.medikoo.com/)", + "dependencies": Object { + "es5-ext": "^0.10.64", + "type": "^2.7.2", + }, + "description": "Property descriptor factory", + "devDependencies": Object { + "eslint": "^8.57.0", + "eslint-config-medikoo": "^4.2.0", + "git-list-updated": "^1.2.1", + "github-release-from-cc-changelog": "^2.3.0", + "husky": "^4.3.8", + "lint-staged": "~13.2.3", + "nyc": "^15.1.0", + "prettier-elastic": "^2.8.8", + "tad": "^3.1.1", + }, + "engines": Object { + "node": ">=0.12", + }, + "husky": Object { + "hooks": Object { + "pre-commit": "lint-staged", }, - "path": Object { - "files": Object { - "app.asar": Object { - "offset": "1229", - "size": 714, + }, + "license": "ISC", + "lint-staged": Object { + "*.js": Array [ + "eslint", + ], + "*.{css,html,js,json,md,yaml,yml}": Array [ + "prettier -c", + ], + }, + "name": "d", + "prettier": Object { + "overrides": Array [ + Object { + "files": Array [ + "*.md", + "*.yml", + ], + "options": Object { + "tabWidth": 2, }, }, - }, + ], + "printWidth": 100, + "tabWidth": 4, + }, + "repository": "medikoo/d", + "version": "1.0.2", +} +`; + +exports[`yarn parse-asn1 1`] = ` +Object { + "linux": Array [], +} +`; + +exports[`yarn parse-asn1 2`] = ` +Object { + "author": "Fedor Indutny", + "dependencies": Object { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", }, + "description": "ASN.1 encoder and decoder", + "devDependencies": Object { + "mocha": "^2.3.4", + }, + "homepage": "https://github.com/indutny/asn1.js", + "license": "MIT", + "main": "lib/asn1.js", + "name": "asn1.js", + "repository": Object { + "type": "git", + "url": "git@github.com:indutny/asn1.js", + }, + "version": "4.10.1", } `; @@ -1416,96 +1482,3 @@ Object { }, } `; - -exports[`pnpm es5-ext without hoisted config 1`] = ` -Object { - "linux": Array [], -} -`; - -exports[`pnpm es5-ext without hoisted config 2`] = ` -Object { - "author": "Mariusz Nowak (http://www.medikoo.com/)", - "dependencies": Object { - "es5-ext": "^0.10.64", - "type": "^2.7.2", - }, - "description": "Property descriptor factory", - "devDependencies": Object { - "eslint": "^8.57.0", - "eslint-config-medikoo": "^4.2.0", - "git-list-updated": "^1.2.1", - "github-release-from-cc-changelog": "^2.3.0", - "husky": "^4.3.8", - "lint-staged": "~13.2.3", - "nyc": "^15.1.0", - "prettier-elastic": "^2.8.8", - "tad": "^3.1.1", - }, - "engines": Object { - "node": ">=0.12", - }, - "husky": Object { - "hooks": Object { - "pre-commit": "lint-staged", - }, - }, - "license": "ISC", - "lint-staged": Object { - "*.js": Array [ - "eslint", - ], - "*.{css,html,js,json,md,yaml,yml}": Array [ - "prettier -c", - ], - }, - "name": "d", - "prettier": Object { - "overrides": Array [ - Object { - "files": Array [ - "*.md", - "*.yml", - ], - "options": Object { - "tabWidth": 2, - }, - }, - ], - "printWidth": 100, - "tabWidth": 4, - }, - "repository": "medikoo/d", - "version": "1.0.2", -} -`; - -exports[`yarn parse-asn1 1`] = ` -Object { - "linux": Array [], -} -`; - -exports[`yarn parse-asn1 2`] = ` -Object { - "author": "Fedor Indutny", - "dependencies": Object { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - }, - "description": "ASN.1 encoder and decoder", - "devDependencies": Object { - "mocha": "^2.3.4", - }, - "homepage": "https://github.com/indutny/asn1.js", - "license": "MIT", - "main": "lib/asn1.js", - "name": "asn1.js", - "repository": Object { - "type": "git", - "url": "git@github.com:indutny/asn1.js", - }, - "version": "4.10.1", -} -`; diff --git a/test/src/HoistedNodeModuleTest.ts b/test/src/HoistedNodeModuleTest.ts index a48785ad1a1..9c77baf99c0 100644 --- a/test/src/HoistedNodeModuleTest.ts +++ b/test/src/HoistedNodeModuleTest.ts @@ -74,15 +74,15 @@ test.ifAll("pnpm es5-ext without hoisted config", () => outputFile(path.join(projectDir, "pnpm-lock.yaml"), ""), ]) }, - packed: async context =>{ - expect(await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/d/package.json")).toMatchSnapshot() - } + packed: async context => { + expect(await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/d/package.json")).toMatchSnapshot() + }, } ) ) -// https://github.com/electron-userland/electron-builder/issues/8493 -test.ifAll("yarn parse-asn1", () => +//github.com/electron-userland/electron-builder/issues/8426 +https: test.ifAll("yarn parse-asn1", () => assertPack( "test-app-hoisted", { @@ -94,15 +94,46 @@ test.ifAll("yarn parse-asn1", () => return Promise.all([ modifyPackageJson(projectDir, data => { data.dependencies = { - "parse-asn1":"5.1.7" + "parse-asn1": "5.1.7", } }), outputFile(path.join(projectDir, "yarn.lock"), ""), ]) }, - packed: async context =>{ - expect(await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/asn1.js/package.json")).toMatchSnapshot() - } + packed: async context => { + expect(await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/asn1.js/package.json")).toMatchSnapshot() + }, + } + ) +) + +//github.com/electron-userland/electron-builder/issues/8431 +https: test.ifAll("npm tar", () => + assertPack( + "test-app-hoisted", + { + targets: linuxDirTarget, + }, + { + isInstallDepsBefore: true, + projectDirCreated: projectDir => { + return Promise.all([ + modifyPackageJson(projectDir, data => { + data.dependencies = { + tar: "7.4.3", + } + }), + outputFile(path.join(projectDir, "package-lock.json"), ""), + ]) + }, + packed: async context => { + let tar = await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/tar/package.json") + let minipass = await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/minipass/package.json") + let minizlib = await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "node_modules/minizlib/package.json") + expect(tar.version).toEqual("7.4.3") + expect(minipass.version).toEqual("7.1.2") + expect(minizlib.version).toEqual("3.0.1") + }, } ) -) \ No newline at end of file +) From fb5e01e3e4874b6ed1cbe89980899c14e5dbcde1 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 16:31:09 +0800 Subject: [PATCH 77/85] add comments --- packages/app-builder-lib/src/node-module-collector/hoist.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/app-builder-lib/src/node-module-collector/hoist.ts b/packages/app-builder-lib/src/node-module-collector/hoist.ts index b4b01667b1b..0946f29bb7f 100644 --- a/packages/app-builder-lib/src/node-module-collector/hoist.ts +++ b/packages/app-builder-lib/src/node-module-collector/hoist.ts @@ -1,4 +1,6 @@ // copy from https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-nm/sources/hoist.ts +// commit: d63d411bcc5adcbffd198b8987c5a14c81eaf669 +// fix(nm): optimize hoisting by treating peer deps same as other deps (#6517) /** * High-level node_modules hoisting algorithm recipe * From 1039ed097e45090bf4757c82e22b81be110d1c61 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Thu, 10 Oct 2024 17:05:35 +0800 Subject: [PATCH 78/85] update node version --- .github/actions/pnpm/action.yml | 2 +- .github/actions/pretest/action.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/pnpm/action.yml b/.github/actions/pnpm/action.yml index 734030f2b00..682d1337f90 100644 --- a/.github/actions/pnpm/action.yml +++ b/.github/actions/pnpm/action.yml @@ -17,7 +17,7 @@ runs: - name: Setup node uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: - node-version: '18' + node-version: '20' cache: 'pnpm' - name: Install dependencies diff --git a/.github/actions/pretest/action.yml b/.github/actions/pretest/action.yml index b1828cdf8e7..af33d8b535c 100644 --- a/.github/actions/pretest/action.yml +++ b/.github/actions/pretest/action.yml @@ -28,7 +28,7 @@ runs: - name: Setup node uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 with: - node-version: '18' + node-version: '20' cache: 'pnpm' - name: Install dependencies From 457c2e5d18cfb81e5b6cb8040d743c1b8ac49231 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Fri, 11 Oct 2024 04:51:39 -0400 Subject: [PATCH 79/85] fix ut --- test/src/globTest.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 74bc630cb7b..c4022f5b694 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -6,6 +6,7 @@ import * as fs from "fs/promises" import { assertThat } from "./helpers/fileAssert" import { app, assertPack, modifyPackageJson, PackedContext, removeUnstableProperties, verifyAsarFileTree } from "./helpers/packTester" import { verifySmartUnpack } from "./helpers/verifySmartUnpack" +import { spawnSync } from "child_process" async function createFiles(appDir: string) { await Promise.all([ @@ -143,6 +144,7 @@ test.ifDevOrLinuxCi("local node module with file protocol", () => { const tempDir = await tmpDir.getTempDir() let localPath = path.join(tempDir, "foo") await outputFile(path.join(localPath, "package.json"), `{"name":"foo","version":"9.0.0","main":"index.js","license":"MIT","dependencies":{"ms":"2.0.0"}}`) + spawnSync("npm", ["install"], { cwd: localPath }) await modifyPackageJson(projectDir, data => { data.dependencies = { foo: `file:${localPath}`, From d2e2de770dfcae59c4e2080fb980ce39a04ca028 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 12 Oct 2024 13:30:21 +0800 Subject: [PATCH 80/85] add ut for hoist --- .github/workflows/test.yaml | 2 +- test/src/HoistTest.ts | 663 ++++++++++++++++++++++++++++++++++++ 2 files changed, 664 insertions(+), 1 deletion(-) create mode 100644 test/src/HoistTest.ts diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 27ee1c47856..bee78facd7e 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -19,7 +19,7 @@ jobs: fail-fast: false matrix: testFiles: - - ArtifactPublisherTest,BuildTest,ExtraBuildTest,RepoSlugTest,binDownloadTest,configurationValidationTest,filenameUtilTest,filesTest,globTest,ignoreTest,macroExpanderTest,mainEntryTest,urlUtilTest,extraMetadataTest,linuxArchiveTest,linuxPackagerTest,HoistedNodeModuleTest,MemoLazyTest + - ArtifactPublisherTest,BuildTest,ExtraBuildTest,RepoSlugTest,binDownloadTest,configurationValidationTest,filenameUtilTest,filesTest,globTest,ignoreTest,macroExpanderTest,mainEntryTest,urlUtilTest,extraMetadataTest,linuxArchiveTest,linuxPackagerTest,HoistedNodeModuleTest,MemoLazyTest,HoistTest - snapTest,debTest,fpmTest,protonTest steps: - name: Checkout code repository diff --git a/test/src/HoistTest.ts b/test/src/HoistTest.ts new file mode 100644 index 00000000000..63268b255bb --- /dev/null +++ b/test/src/HoistTest.ts @@ -0,0 +1,663 @@ +import { hoist, HoisterTree, HoisterResult, HoisterDependencyKind } from "app-builder-lib/src/node-module-collector/hoist" + +const toTree = (obj: any, key: string = `.`, nodes = new Map()): HoisterTree => { + let node = nodes.get(key) + const name = key.match(/@?[^@]+/)![0] + if (!node) { + node = { + name, + identName: (obj[key] || {}).identName || name, + reference: key.match(/@?[^@]+@?(.+)?/)![1] || ``, + dependencies: new Set(), + peerNames: new Set((obj[key] || {}).peerNames || []), + dependencyKind: (obj[key] || {}).dependencyKind, + } + nodes.set(key, node) + + for (const dep of (obj[key] || {}).dependencies || []) { + node.dependencies.add(toTree(obj, dep, nodes)) + } + } + return node +} + +const getTreeHeight = (tree: HoisterResult): number => { + let height = 0 + let maxHeight = 0 + const seen = new Set() + + const visitNode = (node: HoisterResult) => { + if (seen.has(node)) return + seen.add(node) + + height += 1 + maxHeight = Math.max(height, maxHeight) + for (const dep of node.dependencies) visitNode(dep) + height -= 1 + } + + visitNode(tree) + + return maxHeight +} + +describe(`hoist`, () => { + it(`should do very basic hoisting`, () => { + // . -> A -> B + // should be hoisted to: + // . -> A + // -> B + const tree = { + ".": { dependencies: [`A`] }, + A: { dependencies: [`B`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(2) + }) + + it(`should support basic cyclic dependencies`, () => { + // . -> C -> A -> B -> A + // -> D -> E + // should be hoisted to: + // . -> A + // -> B + // -> C + // -> D + // -> E + const tree = { + ".": { dependencies: [`C`] }, + C: { dependencies: [`A`] }, + A: { dependencies: [`B`, `D`] }, + B: { dependencies: [`A`, `E`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(2) + }) + + // it(`should support simple cyclic peer dependencies`, () => { + // // -> D -> A --> B + // // -> B --> C + // // -> C --> A + // // Ideally should be hoisted to: + // // -> D + // // -> A + // // -> B + // // -> C + // // but its difficult and its okay if hoister at least doesn't loop and leave the graph in original state + + // const tree = { + // '.': {dependencies: [`D`]}, + // D: {dependencies: [`A`, `B`, `C`]}, + // A: {dependencies: [`B`], peerNames: [`B`]}, + // B: {dependencies: [`C`], peerNames: [`C`]}, + // C: {dependencies: [`A`], peerNames: [`A`]}, + // }; + // expect(getTreeHeight(hoist(toTree(tree), {check: true}))).toEqual(3); + // }); + + it(`should support cyclic peer dependencies`, () => { + // . -> E@X + // -> D -> A --> B + // -> B --> C + // -> C --> A + // --> E@Y + // -> E@Y + // Should be hoisted to: + // . -> E@X + // -> D -> A + // -> B + // -> C + // -> E@Y + const tree = { + ".": { dependencies: [`D`, `E@X`] }, + D: { dependencies: [`A`, `B`, `C`, `E@Y`] }, + A: { dependencies: [`B`], peerNames: [`B`] }, + B: { dependencies: [`C`], peerNames: [`C`] }, + C: { dependencies: [`A`, `E@Y`], peerNames: [`A`, `E`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should keep require promise`, () => { + // . -> A -> B -> C@X -> D@X + // -> F@X -> G@X + // -> C@Z + // -> F@Z + // -> C@Y + // -> D@Y + // should be hoisted to: + // . -> A + // -> C@Z + // -> D@X + // -> B -> C@X + // -> F@X + // -> C@Y + // -> D@Y + // -> F@Z + // -> G@X + const tree = { + ".": { dependencies: [`A`, `C@Y`, `D@Y`] }, + A: { dependencies: [`B`, `C@Z`, `F@Z`] }, + B: { dependencies: [`C@X`, `F@X`] }, + "F@X": { dependencies: [`G@X`] }, + "C@X": { dependencies: [`D@X`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should not forget hoisted dependencies`, () => { + // . -> A -> B -> C@X + // -> A + // -> C@Y + // should be hoisted to (B cannot be hoisted to the top, otherwise it will require C@Y instead of C@X) + // . -> A -> B + // -> C@X + // -> C@Y + const tree = { + ".": { dependencies: [`A`, `C@Y`] }, + A: { dependencies: [`B`] }, + B: { dependencies: [`A`, `C@X`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should not hoist different package with the same name`, () => { + // . -> A -> B@X + // -> B@Y + // should not be changed + const tree = { + ".": { dependencies: [`A`, `B@Y`] }, + A: { dependencies: [`B@X`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should not hoist package that has several versions on the same tree path`, () => { + // . -> A -> B@X -> C -> B@Y + // should be hoisted to: + // . -> A + // -> B@X + // -> C -> B@Y + const tree = { + ".": { dependencies: [`A`] }, + A: { dependencies: [`B@X`] }, + "B@X": { dependencies: [`C`] }, + C: { dependencies: [`B@Y`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should perform deep hoisting`, () => { + // . -> A -> B@X -> C@Y + // -> C@X + // -> B@Y + // -> C@X + // should be hoisted to: + // . -> A -> B@X -> C@Y + // -> B@Y + // -> C@X + const tree = { + ".": { dependencies: [`A`, `B@Y`, `C@X`] }, + A: { dependencies: [`B@X`, `C@X`] }, + "B@X": { dependencies: [`C@Y`] }, + C: { dependencies: [`B@Y`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(4) + }) + + it(`should tolerate self-dependencies`, () => { + // . -> . -> A -> A -> B@X -> B@X -> C@Y + // -> C@X + // -> B@Y + // -> C@X + // should be hoisted to: + // . -> A -> B@X -> C@Y + // -> B@Y + // -> C@X + const tree = { + ".": { dependencies: [`.`, `A`, `B@Y`, `C@X`] }, + A: { dependencies: [`A`, `B@X`, `C@X`] }, + "B@X": { dependencies: [`B@X`, `C@Y`] }, + C: { dependencies: [`B@Y`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(4) + }) + + it(`should honor package popularity when hoisting`, () => { + // . -> A -> B@X + // -> C -> B@X + // -> D -> B@Y + // -> E -> B@Y + // -> F -> G -> B@Y + // should be hoisted to: + // . -> A -> B@X + // -> C -> B@X + // -> D + // -> E + // -> F + // -> G + // -> B@Y + const tree = { + ".": { dependencies: [`A`, `C`, `D`, `E`, `F`] }, + A: { dependencies: [`B@X`] }, + C: { dependencies: [`B@X`] }, + D: { dependencies: [`B@Y`] }, + E: { dependencies: [`B@Y`] }, + F: { dependencies: [`G`] }, + G: { dependencies: [`B@Y`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should honor peer dependencies`, () => { + // . -> A -> B --> D@X + // -> D@X + // -> D@Y + // should be hoisted to (A and B should share single D@X dependency): + // . -> A -> B + // -> D@X + // -> D@Y + const tree = { + ".": { dependencies: [`A`, `D@Y`] }, + A: { dependencies: [`B`, `D@X`] }, + B: { dependencies: [`D@X`], peerNames: [`D`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should honor package popularity considering number of all references over number of references by peers`, () => { + // . -> A -> Z@X + // -> B -> Z@X + // -> C -> Z@X + // -> D -> Z@Y + // -> U -> Z@Y + // should be hoisted to: + // . -> A + // -> B + // -> C + // -> D -> U + // -> Z@Y + // -> Z@X + const tree = toTree({ + ".": { dependencies: [`A`, `B`, `C`, `D`] }, + A: { dependencies: [`Z@X`] }, + B: { dependencies: [`Z@X`] }, + C: { dependencies: [`Z@X`] }, + D: { dependencies: [`Z@Y`, `U`] }, + U: { dependencies: [`Z@Y`], peerNames: [`Z`] }, + }) + const result = hoist(tree, { check: true }) + expect(getTreeHeight(result)).toEqual(3) + + const topLevelDeps = [...result.dependencies] + const hoistedZ = topLevelDeps.find(x => x.name === `Z`)! + expect(hoistedZ.references).toContain(`X`) + expect(hoistedZ.references).not.toContain(`Y`) + + const D = topLevelDeps.find(x => x.name === `D`)! + const dDeps = [...D.dependencies] + expect(dDeps.length).toEqual(2) + const nestedZ = dDeps.find(x => x.name === `Z`)! + expect(nestedZ.references).not.toContain(`X`) + expect(nestedZ.references).toContain(`Y`) + }) + + it(`should hoist dependencies after hoisting peer dep`, () => { + // . -> A -> B --> D@X + // -> D@X + // should be hoisted to (B should be hoisted because its inherited dep D@X was hoisted): + // . -> A + // -> B + // -> D@X + const tree = { + ".": { dependencies: [`A`] }, + A: { dependencies: [`B`, `D@X`] }, + B: { dependencies: [`D@X`], peerNames: [`D`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(2) + }) + + it(`should honor unhoisted peer dependencies`, () => { + // . -> A --> B@X + // -> C@X -> B@Y + // -> B@X + // -> C@Y + // should be hoisted to: + // . -> A -> C@X -> B@Y + // -> B@X + // -> C@Y + const tree = { + ".": { dependencies: [`A`, `B@X`, `C@Y`] }, + A: { dependencies: [`B@X`, `C@X`], peerNames: [`B`] }, + "C@X": { dependencies: [`B@Y`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(4) + }) + + it(`should honor peer dependency promise for the same version of dependency`, () => { + // . -> A -> B -> C + // --> B + // should be hoisted to (B must not be hoisted to the top): + // . -> A -> B + // -> C + const tree = { + ".": { dependencies: [`A`], peerNames: [`B`] }, + A: { dependencies: [`B`] }, + B: { dependencies: [`C`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should hoist different copies of a package independently`, () => { + // . -> A -> B@X -> C@X + // -> C@Y + // -> D -> B@X -> C@X + // -> B@Y + // -> C@Z + // should be hoisted to (top C@X instance must not be hoisted): + // . -> A -> B@X -> C@X + // -> C@Y + // -> D -> B@X + // -> C@X + // -> B@Y + // -> C@Z + const tree = { + ".": { dependencies: [`A`, `D`, `B@Y`, `C@Z`] }, + A: { dependencies: [`B@X`, `C@Y`] }, + "B@X": { dependencies: [`C@X`] }, + D: { dependencies: [`B@X`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(4) + }) + + it(`should hoist different copies of a package independently (complicated case)`, () => { + // . -> A -> B@X -> C@X -> D@X + // -> C@Y + // -> E -> B@X -> C@X -> D@X + // -> F -> G -> B@X -> C@X -> D@X + // -> D@Z + // -> B@Y + // -> D@Y + // -> C@Z + // should be hoisted to (top C@X instance must not be hoisted): + // . -> A -> B@X →->C@X + // -> C@Y + // -> D@X + // -> E -> B@X + // -> C@X + // -> D@X + // -> F -> B@X -> D@X + // -> C@X + // -> D@Z + // -> B@Y + // -> D@Y + // -> C@Z + const tree = { + ".": { dependencies: [`A`, `E`, `F`, `B@Y`, `C@Z`, `D@Y`] }, + A: { dependencies: [`B@X`, `C@Y`] }, + "B@X": { dependencies: [`C@X`] }, + "C@X": { dependencies: [`D@X`] }, + E: { dependencies: [`B@X`] }, + F: { dependencies: [`G`] }, + G: { dependencies: [`B@X`, `D@Z`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(4) + }) + + it(`should keep peer dependency promise for the case where the package with same ident is a dependency of parent node`, () => { + // . -> A -> B@X --> C + // -> C@Y + // -> B@X --> C + // -> C@X + // B@X cannot be hoisted to the top from A, because its peer dependency promise will be violated in this case + // `npm` and `yarn v1` will hoist B@X to the top, they have incorrect hoisting + const tree = { + ".": { dependencies: [`A`, `B@X#2`, `C@X`] }, + A: { dependencies: [`B@X#1`, `C@Y`] }, + "B@X#1": { dependencies: [`C@Y`], peerNames: [`C`] }, + "B@X#2": { dependencies: [`C@X`], peerNames: [`C`] }, + } + const hoistedTree = hoist(toTree(tree), { check: true }) + const [A] = Array.from(hoistedTree.dependencies).filter(x => x.name === `A`) + expect(Array.from(A.dependencies).filter(x => x.name === `B`)).toBeDefined() + }) + + it(`should hoist cyclic peer dependencies`, () => { + // . -> A -> B -> C --> D + // -> D --> E + // --> C + // --> E + // + // -> F --> G + // -> G + // -> C --> D + // -> D --> E + // --> C + // -> E --> C + // should be hoisted to: + // . -> A + // -> B + // -> C + // -> D + // -> E + // -> F + // -> G + const tree = { + ".": { dependencies: [`A`] }, + A: { dependencies: [`B`, `C`, `D`, `E`] }, + B: { dependencies: [`C`, `D`, `E`, `F`, `G`], peerNames: [`E`] }, + C: { dependencies: [`D`], peerNames: [`D`] }, + D: { dependencies: [`E`, `C`], peerNames: [`E`, `C`] }, + E: { dependencies: [`C`], peerNames: [`C`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(2) + }) + + it(`should respect transitive peer dependencies mixed with direct peer dependencies`, () => { + // . -> A -> B -> D --> C + // --> E + // -> E + // --> C + // -> C@X + // -> C@Y + // D cannot be hoisted to the top, otherwise it will use C@Y, instead of C@X + const tree = { + ".": { dependencies: [`A`, `C@Y`] }, + A: { dependencies: [`B`, `C@X`] }, + B: { dependencies: [`D`, `E`, `C@X`], peerNames: [`C`] }, + D: { dependencies: [`C@X`, `E`], peerNames: [`C`, `E`] }, + } + const hoistedTree = hoist(toTree(tree), { check: true }) + const D = Array.from(hoistedTree.dependencies).filter(x => x.name === `D`) + expect(D).toEqual([]) + }) + + it(`should not hoist packages past hoist boundary`, () => { + // . -> A -> B -> D + // -> C -> D + // If B and C are hoist borders, the result should be: + // . -> A + // -> B -> D + // -> C -> D + const tree = { + ".": { dependencies: [`A`, `C`] }, + A: { dependencies: [`B`] }, + B: { dependencies: [`D`] }, + C: { dependencies: [`D`] }, + } + const hoistingLimits = new Map([ + [`.@`, new Set([`C`])], + [`A@`, new Set([`B`])], + ]) + expect(getTreeHeight(hoist(toTree(tree), { check: true, hoistingLimits }))).toEqual(3) + }) + + it(`should not hoist multiple package past nohoist root`, () => { + // . -> A -> B -> C -> D -> E + // If B is a hoist border, the result should be: + // . -> A + // -> B -> C + // -> D + const tree = { + ".": { dependencies: [`A`] }, + A: { dependencies: [`B`] }, + B: { dependencies: [`C`] }, + C: { dependencies: [`D`] }, + D: { dependencies: [`E`] }, + } + const hoistingLimits = new Map([[`A@`, new Set([`B`])]]) + expect(getTreeHeight(hoist(toTree(tree), { check: true, hoistingLimits }))).toEqual(3) + }) + + it(`should hoist a tree which requires multiple passes to get terminal result`, () => { + // . -> A -> D@X -> F@X -> E@X -> B@Y -> C@Z + // -> C@X + // -> C@Z + // -> C@X + // -> B@X + // -> C@Z + // -> D@Y + // -> E@Y + // -> F@Y + // We try to hoist everything we can to the `.` node first, we cannot hoist anything + // Then we try to hoist everything we can to `A` (`C@Z` has a priority, because its more popular), we have: + // . -> A -> D@X -> C@X + // -> F@X + // -> E@X -> C@X + // -> B@Y + // -> C@Z + // -> B@X + // -> C@Z + // -> D@Y + // -> E@Y + // -> F@Y + // And now we can hoist `C@Z` from `A`, but we need another pass to do it and the final result will be: + // . -> A -> D@X -> C@X + // -> F@X + // -> E@X -> C@X + // -> B@Y + // -> B@X + // -> C@Z + // -> D@Y + // -> E@Y + // -> F@Y + const tree = { + ".": { dependencies: [`A`, `B@X`, `C@Z`, `D@Y`, `E@Y`, `F@Y`] }, + A: { dependencies: [`D@X`] }, + "D@X": { dependencies: [`F@X`, `C@X`] }, + "F@X": { dependencies: [`E@X`, `C@Z`] }, + "E@X": { dependencies: [`B@Y`, `C@X`] }, + "B@Y": { dependencies: [`C@Z`] }, + } + const hoistedTree = hoist(toTree(tree), { check: true }) + const AC = Array.from(Array.from(hoistedTree.dependencies).filter(x => x.name === `A`)[0].dependencies).filter(x => x.name === `C`) + expect(AC).toEqual([]) + }) + + it(`should hoist dependencies that peer dependent on their parent`, () => { + // . -> C -> A -> B --> A + // should be hoisted to: + // . -> A + // -> B + // -> C + const tree = { + ".": { dependencies: [`C`] }, + C: { dependencies: [`A`] }, + A: { dependencies: [`A`, `B`] }, + B: { dependencies: [`A`], peerNames: [`A`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(2) + }) + + it(`should hoist direct workspace dependencies into non-root workspace`, () => { + // . -> W1(w) -> W2(w) -> W3(w)-> A@X + // -> A@Y + // -> W3 + // -> A@Z + // The A@X must be hoisted into W2(w) + // Accessing A via . -> W3 with --preserve-symlinks will result in A@Z, + // but accessing it via W3(w) will result in A@Y, however if we don't do it, + // inner workspaces will have multiple unexpected copies of dependencies + const tree = { + ".": { dependencies: [`W1(w)`, `W3`, `A@Z`], dependencyKind: HoisterDependencyKind.WORKSPACE }, + "W1(w)": { dependencies: [`W2(w)`, `A@Y`], dependencyKind: HoisterDependencyKind.WORKSPACE }, + "W2(w)": { dependencies: [`W3(w)`], dependencyKind: HoisterDependencyKind.WORKSPACE }, + "W3(w)": { dependencies: [`A@X`], dependencyKind: HoisterDependencyKind.WORKSPACE }, + } + + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(4) + }) + + it(`should hoist dependencies to the top from workspaces that have no hoist borders given there is workspace with hoist borders`, () => { + // . -> W1(w)| -> A@X --> B + // -> B@X + // -> W2(w) -> A@Y --> B + // -> B@Y + // should be hoisted to: + // . -> W1(w)| -> A@X -->B + // -> B@X + // -> W2(w) + // -> A@Y --> B + // -> B@Y + + const tree = { + ".": { dependencies: [`W1(w)`, `W2(w)`], dependencyKind: HoisterDependencyKind.WORKSPACE }, + "W1(w)": { dependencies: [`A@X`, `B@X`], dependencyKind: HoisterDependencyKind.WORKSPACE }, + "A@X": { dependencies: [`B@X`], peerNames: [`B`] }, + "A@Y": { dependencies: [`B@Y`], peerNames: [`B`] }, + "W2(w)": { dependencies: [`A@Y`, `B@Y`], dependencyKind: HoisterDependencyKind.WORKSPACE }, + } + + const hoistingLimits = new Map([[`.@`, new Set([`W1(w)`])]]) + + const hoistedTree = hoist(toTree(tree), { check: true, hoistingLimits }) + const W2 = Array.from(Array.from(hoistedTree.dependencies).filter(x => x.name === `W2(w)`)[0].dependencies) + expect(W2).toEqual([]) + }) + + it(`should hoist aliased packages`, () => { + const tree = { + ".": { dependencies: [`Aalias`] }, + Aalias: { identName: `A`, dependencies: [`A`] }, + A: { dependencies: [`B`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should not hoist portal with unhoistable dependencies`, () => { + const tree = { + ".": { dependencies: [`P1`, `B@Y`] }, + P1: { dependencies: [`P2`], dependencyKind: HoisterDependencyKind.EXTERNAL_SOFT_LINK }, + P2: { dependencies: [`B@X`], dependencyKind: HoisterDependencyKind.EXTERNAL_SOFT_LINK }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(3) + }) + + it(`should hoist nested portals with hoisted dependencies`, () => { + const tree = { + ".": { dependencies: [`P1`, `B@X`] }, + P1: { dependencies: [`P2`, `B@X`], dependencyKind: HoisterDependencyKind.EXTERNAL_SOFT_LINK }, + P2: { dependencies: [`P3`, `B@X`], dependencyKind: HoisterDependencyKind.EXTERNAL_SOFT_LINK }, + P3: { dependencies: [`B@X`], dependencyKind: HoisterDependencyKind.EXTERNAL_SOFT_LINK }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(2) + }) + + it(`should support two branch circular graph hoisting`, () => { + // . -> B -> D@X -> F@X + // -> E@X -> D@X + // -> F@X + // -> C -> D@Y -> F@Y + // -> E@Y -> D@Y + // -> F@Y + // This graph with two similar circular branches should be hoisted in a finite time + const tree = { + ".": { dependencies: [`B`, `C`] }, + B: { dependencies: [`D@X`] }, + C: { dependencies: [`D@Y`] }, + "D@X": { dependencies: [`E@X`, `F@X`] }, + "D@Y": { dependencies: [`E@Y`, `F@X`] }, + "E@X": { dependencies: [`D@X`, `F@X`] }, + "E@Y": { dependencies: [`D@Y`, `F@Y`] }, + } + expect(getTreeHeight(hoist(toTree(tree), { check: true }))).toEqual(4) + }) +}) From e6f3b59729c9805e78d9447caae76da48bb3f90a Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 12 Oct 2024 13:30:55 +0800 Subject: [PATCH 81/85] add comments --- test/src/HoistTest.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/src/HoistTest.ts b/test/src/HoistTest.ts index 63268b255bb..61179a9c4ef 100644 --- a/test/src/HoistTest.ts +++ b/test/src/HoistTest.ts @@ -1,3 +1,4 @@ +// copy from https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-nm/tests/hoist.test.ts import { hoist, HoisterTree, HoisterResult, HoisterDependencyKind } from "app-builder-lib/src/node-module-collector/hoist" const toTree = (obj: any, key: string = `.`, nodes = new Map()): HoisterTree => { From b57ffc86d338d3b771266106cf691f6a9581f55b Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 12 Oct 2024 13:57:06 +0800 Subject: [PATCH 82/85] fix ut --- .../nodeModulesCollector.ts | 18 +++++++++++++++++- test/src/HoistTest.ts | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index e1c2bbe22e0..7e9a3688256 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -1,6 +1,8 @@ import { hoist, type HoisterTree, type HoisterResult } from "./hoist" import * as path from "path" +import * as fs from "fs" import { NodeModuleInfo, DependencyTree, DependencyGraph } from "./types" +import { log } from "builder-util" export abstract class NodeModulesCollector { private nodeModules: NodeModuleInfo[] @@ -33,6 +35,20 @@ export abstract class NodeModulesCollector { return node } + private resolvePath(filePath:string) { + try { + const stats = fs.lstatSync(filePath); + if (stats.isSymbolicLink()) { + return fs.realpathSync(filePath); + } else { + return filePath; + } + } catch (error) { + log.error({filePath},'Error resolving path'); + return filePath; + } + } + public TransToDependencyGraph(tree: DependencyTree): DependencyGraph { const result: DependencyGraph = { ".": {} } @@ -46,7 +62,7 @@ export abstract class NodeModulesCollector { } const version = value.version || "" const newKey = `${key}@${version}` - this.dependencyPathMap.set(newKey, path.normalize(value.path)) + this.dependencyPathMap.set(newKey, path.normalize(this.resolvePath(value.path))) if (!result[parentKey]?.dependencies) { result[parentKey] = { dependencies: [] } } diff --git a/test/src/HoistTest.ts b/test/src/HoistTest.ts index 61179a9c4ef..215e0aa06ba 100644 --- a/test/src/HoistTest.ts +++ b/test/src/HoistTest.ts @@ -1,5 +1,5 @@ // copy from https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-nm/tests/hoist.test.ts -import { hoist, HoisterTree, HoisterResult, HoisterDependencyKind } from "app-builder-lib/src/node-module-collector/hoist" +import { hoist, HoisterTree, HoisterResult, HoisterDependencyKind } from "app-builder-lib/out/node-module-collector/hoist" const toTree = (obj: any, key: string = `.`, nodes = new Map()): HoisterTree => { let node = nodes.get(key) From 72dc5597513d718f6b4e29ee4c5064a5b35c2b3e Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 12 Oct 2024 13:58:00 +0800 Subject: [PATCH 83/85] format code --- .../node-module-collector/nodeModulesCollector.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index 7e9a3688256..bada6b7905e 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -35,17 +35,17 @@ export abstract class NodeModulesCollector { return node } - private resolvePath(filePath:string) { + private resolvePath(filePath: string) { try { - const stats = fs.lstatSync(filePath); + const stats = fs.lstatSync(filePath) if (stats.isSymbolicLink()) { - return fs.realpathSync(filePath); + return fs.realpathSync(filePath) } else { - return filePath; + return filePath } } catch (error) { - log.error({filePath},'Error resolving path'); - return filePath; + log.error({ filePath }, "Error resolving path") + return filePath } } From 7d37e193b9093cb7481671a80e74b1ddbaf52337 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 12 Oct 2024 14:00:31 +0800 Subject: [PATCH 84/85] format code --- .../src/node-module-collector/nodeModulesCollector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts index bada6b7905e..9fde0fe108d 100644 --- a/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts +++ b/packages/app-builder-lib/src/node-module-collector/nodeModulesCollector.ts @@ -44,7 +44,7 @@ export abstract class NodeModulesCollector { return filePath } } catch (error) { - log.error({ filePath }, "Error resolving path") + log.error({ filePath, error }, "Error resolving path") return filePath } } From d50c66dc7c712a06fca8985a5ddcdf60b593a030 Mon Sep 17 00:00:00 2001 From: beyondkmp Date: Sat, 12 Oct 2024 14:26:02 +0800 Subject: [PATCH 85/85] update readme --- README.md | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/README.md b/README.md index 7cb491884d0..365f2ca9b61 100644 --- a/README.md +++ b/README.md @@ -100,21 +100,6 @@ See the full documentation on [electron.build](https://www.electron.build). `yarn add electron-builder --dev` -### Note for PNPM - -In order to use with `pnpm`, you'll need to adjust your `.npmrc` to use any one the following approaches in order for your dependencies to be bundled correctly (ref: [#6389](https://github.com/electron-userland/electron-builder/issues/6289#issuecomment-1042620422)): -``` -node-linker=hoisted -``` -``` -public-hoist-pattern=* -``` -``` -shamefully-hoist=true -``` - -Note: Setting shamefully-hoist to true is the same as setting public-hoist-pattern to *. - ### Note for Yarn 3 Yarn 3 use PnP by default, but electron-builder still need node-modules(ref: [yarnpkg/berry#4804](https://github.com/yarnpkg/berry/issues/4804#issuecomment-1234407305)). Add configuration in the `.yarnrc.yaml` as follows: