From d67b49bfb6841424c4f9fe1333c1830d012b6265 Mon Sep 17 00:00:00 2001 From: Akis Kesoglou Date: Tue, 28 Jun 2022 15:22:42 +0300 Subject: [PATCH] Switch to balena-compose Removes a bunch of individual dependencies by switching to `@balena/compose` which (currently) groups and manages those dependencies together in one package. Change-type: minor --- lib/commands/deploy.ts | 2 +- lib/commands/push.ts | 2 +- lib/utils/compose-types.d.ts | 13 +- lib/utils/compose.ts | 8 +- lib/utils/compose_ts.ts | 52 +- lib/utils/device/deploy.ts | 25 +- lib/utils/device/live.ts | 4 +- lib/utils/docker.ts | 4 +- lib/utils/remote-build.ts | 2 +- npm-shrinkwrap.json | 925 +++++------------- package.json | 7 +- repo.yml | 4 +- tests/commands/deploy.spec.ts | 6 +- tests/docker-build.ts | 2 +- .../pkg/expected-warnings-darwin.txt | 6 + .../test-data/pkg/expected-warnings-linux.txt | 6 + .../test-data/pkg/expected-warnings-win32.txt | 6 + tests/utils/device/live.spec.ts | 2 +- tests/utils/qemu.spec.ts | 6 +- 19 files changed, 341 insertions(+), 741 deletions(-) diff --git a/lib/commands/deploy.ts b/lib/commands/deploy.ts index 36b469bc30..eb1688bd03 100644 --- a/lib/commands/deploy.ts +++ b/lib/commands/deploy.ts @@ -16,7 +16,7 @@ */ import { flags } from '@oclif/command'; -import type { ImageDescriptor } from 'resin-compose-parse'; +import type { ImageDescriptor } from '@balena/compose/dist/parse'; import Command from '../command'; import { ExpectedError } from '../errors'; diff --git a/lib/commands/push.ts b/lib/commands/push.ts index e1b61d9966..29d60ac650 100644 --- a/lib/commands/push.ts +++ b/lib/commands/push.ts @@ -22,7 +22,7 @@ import { getBalenaSdk, stripIndent } from '../utils/lazy'; import { dockerignoreHelp, registrySecretsHelp } from '../utils/messages'; import type { BalenaSDK } from 'balena-sdk'; import { ExpectedError, instanceOf } from '../errors'; -import { RegistrySecrets } from 'resin-multibuild'; +import { RegistrySecrets } from '@balena/compose/dist/multibuild'; import { lowercaseIfSlug } from '../utils/normalization'; import { applyReleaseTagKeysAndValues, diff --git a/lib/utils/compose-types.d.ts b/lib/utils/compose-types.d.ts index 68119ce850..c26813faa8 100644 --- a/lib/utils/compose-types.d.ts +++ b/lib/utils/compose-types.d.ts @@ -15,8 +15,11 @@ * limitations under the License. */ -import type { ImageModel, ReleaseModel } from 'balena-release/build/models'; -import type { Composition, ImageDescriptor } from 'resin-compose-parse'; +import type { + ImageModel, + ReleaseModel, +} from '@balena/compose/dist/release/models'; +import type { Composition, ImageDescriptor } from '@balena/compose/dist/parse'; import type { Pack } from 'tar-stream'; interface Image { @@ -39,7 +42,7 @@ export interface BuiltImage { export interface TaggedImage { localImage: import('dockerode').Image; - serviceImage: import('balena-release/build/models').ImageModel; + serviceImage: import('@balena/compose/dist/release/models').ImageModel; serviceName: string; logs: string; props: BuiltImage.props; @@ -78,7 +81,9 @@ export interface ComposeProject { } export interface Release { - client: ReturnType; + client: ReturnType< + typeof import('@balena/compose/dist/release').createClient + >; release: Pick< ReleaseModel, | 'id' diff --git a/lib/utils/compose.ts b/lib/utils/compose.ts index f07e25fd81..c9c39496e4 100644 --- a/lib/utils/compose.ts +++ b/lib/utils/compose.ts @@ -19,7 +19,7 @@ import type { Renderer } from './compose_ts'; import type * as SDK from 'balena-sdk'; import type Dockerode = require('dockerode'); import * as path from 'path'; -import type { Composition, ImageDescriptor } from 'resin-compose-parse'; +import type { Composition, ImageDescriptor } from '@balena/compose/dist/parse'; import type { BuiltImage, ComposeOpts, @@ -64,7 +64,7 @@ export function createProject( ): ComposeProject { const yml = require('js-yaml') as typeof import('js-yaml'); const compose = - require('resin-compose-parse') as typeof import('resin-compose-parse'); + require('@balena/compose/dist/parse') as typeof import('@balena/compose/dist/parse'); // both methods below may throw. const rawComposition = yml.load(composeStr); @@ -107,7 +107,7 @@ export const createRelease = async function ( const _ = require('lodash') as typeof import('lodash'); const crypto = require('crypto') as typeof import('crypto'); const releaseMod = - require('balena-release') as typeof import('balena-release'); + require('@balena/compose/dist/release') as typeof import('@balena/compose/dist/release'); const client = releaseMod.createClient({ apiEndpoint, auth }); @@ -214,7 +214,7 @@ export const getPreviousRepos = ( image: [SDK.Image]; }>; const { getRegistryAndName } = - require('resin-multibuild') as typeof import('resin-multibuild'); + require('@balena/compose/dist/multibuild') as typeof import('@balena/compose/dist/multibuild'); return Promise.all( images.map(function (d) { const imageName = d.image[0].is_stored_at__image_location || ''; diff --git a/lib/utils/compose_ts.ts b/lib/utils/compose_ts.ts index f969038530..2969e6a9d1 100644 --- a/lib/utils/compose_ts.ts +++ b/lib/utils/compose_ts.ts @@ -16,7 +16,7 @@ */ import { flags } from '@oclif/command'; import { BalenaSDK } from 'balena-sdk'; -import type { TransposeOptions } from 'docker-qemu-transpose'; +import type { TransposeOptions } from '@balena/compose/dist/emulate'; import type * as Dockerode from 'dockerode'; import { promises as fs } from 'fs'; import jsyaml = require('js-yaml'); @@ -26,8 +26,8 @@ import type { BuildConfig, Composition, ImageDescriptor, -} from 'resin-compose-parse'; -import type * as MultiBuild from 'resin-multibuild'; +} from '@balena/compose/dist/parse'; +import type * as MultiBuild from '@balena/compose/dist/multibuild'; import * as semver from 'semver'; import type { Duplex, Readable } from 'stream'; import type { Pack } from 'tar-stream'; @@ -118,7 +118,7 @@ export async function loadProject( image?: string, imageTag?: string, ): Promise { - const compose = await import('resin-compose-parse'); + const compose = await import('@balena/compose/dist/parse'); const { createProject } = await import('./compose'); let composeName: string; let composeStr: string; @@ -262,7 +262,7 @@ export async function buildProject( opts: BuildProjectOpts, ): Promise { await checkBuildSecretsRequirements(opts.docker, opts.projectPath); - const compose = await import('resin-compose-parse'); + const compose = await import('@balena/compose/dist/parse'); const imageDescriptors = compose.parse(opts.composition); const renderer = await startRenderer({ imageDescriptors, ...opts }); let buildSummaryByService: Dictionary | undefined; @@ -333,7 +333,7 @@ async function $buildProject( logger.logDebug('Prepared tasks; building...'); const { BALENA_ENGINE_TMP_PATH } = await import('../config'); - const builder = await import('resin-multibuild'); + const builder = await import('@balena/compose/dist/multibuild'); const builtImages = await builder.performBuilds( tasks, @@ -481,8 +481,9 @@ async function qemuTransposeBuildStream({ throw new Error(`No buildStream for task '${task.tag}'`); } - const transpose = await import('docker-qemu-transpose'); - const { toPosixPath } = (await import('resin-multibuild')).PathUtils; + const transpose = await import('@balena/compose/dist/emulate'); + const { toPosixPath } = (await import('@balena/compose/dist/multibuild')) + .PathUtils; const transposeOptions: TransposeOptions = { hostQemuPath: toPosixPath(binPath), @@ -508,9 +509,9 @@ async function setTaskProgressHooks({ inlineLogs?: boolean; renderer: Renderer; task: BuildTaskPlus; - transposeOptions?: import('docker-qemu-transpose').TransposeOptions; + transposeOptions?: import('@balena/compose/dist/emulate').TransposeOptions; }) { - const transpose = await import('docker-qemu-transpose'); + const transpose = await import('@balena/compose/dist/emulate'); // Get the service-specific log stream const logStream = renderer.streams[task.serviceName]; task.logBuffer = []; @@ -724,16 +725,16 @@ export async function getServiceDirsFromComposition( * * The `image` argument may therefore refer to either a `build` or `image` property * of a service in a docker-compose.yml file, which is a bit confusing but it matches - * the `ImageDescriptor.image` property as defined by `resin-compose-parse`. + * the `ImageDescriptor.image` property as defined by `@balena/compose/parse`. * - * Note that `resin-compose-parse` "normalizes" the docker-compose.yml file such + * Note that `@balena/compose/parse` "normalizes" the docker-compose.yml file such * that, if `services.service.build` is a string, it is converted to a BuildConfig * object with the string value assigned to `services.service.build.context`: - * https://github.com/balena-io-modules/resin-compose-parse/blob/v2.1.3/src/compose.ts#L166-L167 + * https://github.com/balena-io-modules/balena-compose/blob/v0.1.0/lib/parse/compose.ts#L166-L167 * This is why this implementation works when `services.service.build` is defined * as a string in the docker-compose.yml file. * - * @param image The `ImageDescriptor.image` attribute parsed with `resin-compose-parse` + * @param image The `ImageDescriptor.image` attribute parsed with `@balena/compose/parse` */ export function isBuildConfig( image: string | BuildConfig, @@ -759,7 +760,8 @@ export async function tarDirectory( }: TarDirectoryOptions, ): Promise { const { filterFilesWithDockerignore } = await import('./ignore'); - const { toPosixPath } = (await import('resin-multibuild')).PathUtils; + const { toPosixPath } = (await import('@balena/compose/dist/multibuild')) + .PathUtils; let readFile: (file: string) => Promise; if (process.platform === 'win32') { @@ -941,7 +943,7 @@ async function parseRegistrySecrets( throw new ExpectedError('Filename must end with .json, .yml or .yaml'); } const raw = (await fs.readFile(secretsFilename)).toString(); - const multiBuild = await import('resin-multibuild'); + const multiBuild = await import('@balena/compose/dist/multibuild'); const registrySecrets = new multiBuild.RegistrySecretValidator().validateRegistrySecrets( isYaml ? require('js-yaml').load(raw) : JSON.parse(raw), @@ -970,7 +972,7 @@ export async function makeBuildTasks( releaseHash: string = 'unavailable', preprocessHook?: (dockerfile: string) => string, ): Promise { - const multiBuild = await import('resin-multibuild'); + const multiBuild = await import('@balena/compose/dist/multibuild'); const buildTasks = await multiBuild.splitBuildStream(composition, tarStream); logger.logDebug('Found build tasks:'); @@ -1016,7 +1018,7 @@ async function performResolution( releaseHash: string, preprocessHook?: (dockerfile: string) => string, ): Promise { - const multiBuild = await import('resin-multibuild'); + const multiBuild = await import('@balena/compose/dist/multibuild'); const resolveListeners: MultiBuild.ResolveListeners = {}; const resolvePromise = new Promise((_resolve, reject) => { resolveListeners.error = [reject]; @@ -1081,7 +1083,7 @@ async function validateSpecifiedDockerfile( dockerfilePath: string, ): Promise { const { contains, toNativePath, toPosixPath } = ( - await import('resin-multibuild') + await import('@balena/compose/dist/multibuild') ).PathUtils; const nativeProjectPath = path.normalize(projectPath); @@ -1241,7 +1243,7 @@ async function pushAndUpdateServiceImages( token: string, images: TaggedImage[], afterEach: ( - serviceImage: import('balena-release/build/models').ImageModel, + serviceImage: import('@balena/compose/dist/release/models').ImageModel, props: object, ) => void, ) { @@ -1326,12 +1328,14 @@ async function pushAndUpdateServiceImages( async function pushServiceImages( docker: Dockerode, logger: Logger, - pineClient: ReturnType, + pineClient: ReturnType< + typeof import('@balena/compose/dist/release').createClient + >, taggedImages: TaggedImage[], token: string, skipLogUpload: boolean, ): Promise { - const releaseMod = await import('balena-release'); + const releaseMod = await import('@balena/compose/dist/release'); logger.logInfo('Pushing images to registry...'); await pushAndUpdateServiceImages( docker, @@ -1361,8 +1365,8 @@ export async function deployProject( skipLogUpload: boolean, projectPath: string, isDraft: boolean, -): Promise { - const releaseMod = await import('balena-release'); +): Promise { + const releaseMod = await import('@balena/compose/dist/release'); const { createRelease, tagServiceImages } = await import('./compose'); const tty = (await import('./tty'))(process.stdout); diff --git a/lib/utils/device/deploy.ts b/lib/utils/device/deploy.ts index 61d9c97064..e7d1b34c82 100644 --- a/lib/utils/device/deploy.ts +++ b/lib/utils/device/deploy.ts @@ -18,13 +18,13 @@ import * as semver from 'balena-semver'; import * as Docker from 'dockerode'; import * as _ from 'lodash'; -import { Composition } from 'resin-compose-parse'; +import { Composition } from '@balena/compose/dist/parse'; import { BuildTask, getAuthConfigObj, LocalImage, RegistrySecrets, -} from 'resin-multibuild'; +} from '@balena/compose/dist/multibuild'; import type { Readable } from 'stream'; import { BALENA_ENGINE_TMP_PATH } from '../../config'; @@ -321,7 +321,7 @@ async function performBuilds( opts: DeviceDeployOptions, buildLogs?: Dictionary, ): Promise { - const multibuild = await import('resin-multibuild'); + const multibuild = await import('@balena/compose/dist/multibuild'); const buildTasks = await makeBuildTasks( composition, @@ -370,7 +370,7 @@ async function performBuilds( const imagesToRemove: string[] = []; // Now tag any external images with the correct name that they should be, - // as this won't be done by resin-multibuild + // as this won't be done by @balena/compose/multibuild await Promise.all( localImages.map(async (localImage) => { if (localImage.external) { @@ -414,7 +414,7 @@ export async function rebuildSingleTask( // this should provide the following callback containerIdCb?: (id: string) => void, ): Promise { - const multibuild = await import('resin-multibuild'); + const multibuild = await import('@balena/compose/dist/multibuild'); // First we run the build task, to get the new image id let buildLogs = ''; const logHandler = (_s: string, line: string) => { @@ -533,10 +533,17 @@ async function assignDockerBuildOpts( await Promise.all( buildTasks.map(async (task: BuildTask) => { task.dockerOpts = { - cachefrom: images, - labels: { - 'io.resin.local.image': '1', - 'io.resin.local.service': task.serviceName, + ...(task.dockerOpts || {}), + ...{ + cachefrom: images, + labels: { + 'io.resin.local.image': '1', + 'io.resin.local.service': task.serviceName, + }, + t: getImageNameFromTask(task), + nocache: opts.nocache, + forcerm: true, + pull: opts.pull, }, t: getImageNameFromTask(task), nocache: opts.nocache, diff --git a/lib/utils/device/live.ts b/lib/utils/device/live.ts index 642f3710b8..88baaf1f59 100644 --- a/lib/utils/device/live.ts +++ b/lib/utils/device/live.ts @@ -21,8 +21,8 @@ import * as fs from 'fs'; import Livepush, { ContainerNotRunningError } from 'livepush'; import * as _ from 'lodash'; import * as path from 'path'; -import type { Composition } from 'resin-compose-parse'; -import type { BuildTask } from 'resin-multibuild'; +import type { Composition } from '@balena/compose/dist/parse'; +import type { BuildTask } from '@balena/compose/dist/multibuild'; import { instanceOf } from '../../errors'; import Logger = require('../logger'); diff --git a/lib/utils/docker.ts b/lib/utils/docker.ts index b946758341..4242668c38 100644 --- a/lib/utils/docker.ts +++ b/lib/utils/docker.ts @@ -105,7 +105,7 @@ export interface BuildOpts { cachefrom?: string[]; nocache?: boolean; pull?: boolean; - registryconfig?: import('resin-multibuild').RegistrySecrets; + registryconfig?: import('@balena/compose/dist/multibuild').RegistrySecrets; squash?: boolean; t?: string; // only the tag portion of the image name, e.g. 'abc' in 'myimg:abc' } @@ -132,7 +132,7 @@ export function generateBuildOpts(options: { 'cache-from'?: string; nocache: boolean; pull?: boolean; - 'registry-secrets'?: import('resin-multibuild').RegistrySecrets; + 'registry-secrets'?: import('@balena/compose/dist/multibuild').RegistrySecrets; squash: boolean; tag?: string; }): BuildOpts { diff --git a/lib/utils/remote-build.ts b/lib/utils/remote-build.ts index 1adaf5c605..f8526ab15b 100644 --- a/lib/utils/remote-build.ts +++ b/lib/utils/remote-build.ts @@ -17,7 +17,7 @@ import type { BalenaSDK } from 'balena-sdk'; import * as JSONStream from 'JSONStream'; import * as readline from 'readline'; import * as request from 'request'; -import { RegistrySecrets } from 'resin-multibuild'; +import { RegistrySecrets } from '@balena/compose/dist/multibuild'; import type * as Stream from 'stream'; import streamToPromise = require('stream-to-promise'); import type { Pack } from 'tar-stream'; diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 4d312d77fc..6709fae07e 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1294,6 +1294,113 @@ "sax": "^1.2.4" } }, + "@balena/compose": { + "version": "0.1.0-import-modules-8d785f8e4263f509744497389cf5af545aab2d29", + "resolved": "https://registry.npmjs.org/@balena/compose/-/compose-0.1.0-import-modules-8d785f8e4263f509744497389cf5af545aab2d29.tgz", + "integrity": "sha512-5HJBx+AW4gGX8w5Z6+dQFVfFk0xacH42o4LSDaj0Mtm5BrUgynY1y57BX8gbAdANxPZKqLhe4R0BUjd211xuAw==", + "requires": { + "JSONStream": "^1.3.5", + "ajv": "^6.12.3", + "bluebird": "^3.7.2", + "bluebird-lru-cache": "^1.0.1", + "docker-file-parser": "^1.0.7", + "docker-modem": "^3.0.3", + "docker-progress": "^5.1.0", + "dockerfile-ast": "^0.2.1", + "dockerfile-template": "^0.2.1", + "dockerode": "^3.3.1", + "duplexify": "^4.1.2", + "event-stream": "^4.0.1", + "fp-ts": "^2.8.1", + "io-ts": "^2.2.9", + "io-ts-reporters": "^1.2.2", + "js-yaml": "^4.1.0", + "klaw": "^4.0.1", + "lodash": "^4.17.19", + "mz": "^2.7.0", + "pinejs-client-request": "^7.3.5", + "request": "^2.88.2", + "semver": "^7.3.5", + "stream-to-promise": "^3.0.0", + "tar-stream": "^2.1.3", + "tar-utils": "^2.1.0", + "typed-error": "^3.2.1" + }, + "dependencies": { + "docker-file-parser": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/docker-file-parser/-/docker-file-parser-1.0.7.tgz", + "integrity": "sha512-6+VnnhZpxwWvvKwjkRnuqlTtlBRJuM+3cCSXmZoYhyXcdgxx6l/3lwYpqmJ9qmhzgWVeATkpVsTua92BsObJjw==" + }, + "docker-modem": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-3.0.3.tgz", + "integrity": "sha512-Tgkn2a+yiNP9FoZgMa/D9Wk+D2Db///0KOyKSYZRJa8w4+DzKyzQMkczKSdR/adQ0x46BOpeNkoyEOKjPhCzjw==", + "requires": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.4.0" + } + }, + "event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "requires": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "klaw": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", + "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==" + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "ssh2": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.10.0.tgz", + "integrity": "sha512-OnKAAmf4j8wCRrXXZv3Tp5lCZkLJZtgZbn45ELiShCg27djDQ3XFGvIzuGsIsf4hdHslP+VdhA9BhUQdTdfd9w==", + "requires": { + "asn1": "^0.2.4", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.4", + "nan": "^2.15.0" + } + }, + "stream-to-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", + "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", + "requires": { + "any-promise": "~1.3.0", + "end-of-stream": "~1.4.1", + "stream-to-array": "~2.3.0" + } + } + } + }, "@balena/dockerignore": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", @@ -1793,8 +1900,7 @@ } }, "@oclif/plugin-help": { - "version": "3.2.14", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.14.tgz", + "version": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.14.tgz", "integrity": "sha512-NP5qmE2YfcW3MmXjcrxiqKe9Hf3G0uK/qNc0zAMYKU4crFyIsWj7dBfQVFZSb28YXGioOOpjMzG1I7VMxKF38Q==", "requires": { "@oclif/command": "^1.8.9", @@ -2564,28 +2670,12 @@ "@types/node": "*" } }, - "@types/duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==", - "requires": { - "@types/node": "*" - } - }, "@types/ejs": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.0.tgz", "integrity": "sha512-DCg+Ka+uDQ31lJ/UtEXVlaeV3d6t81gifaVWKJy4MYVVgvJttyX/viREy+If7fz+tK/gVxTGMtyrFPnm4gjrVA==", "dev": true }, - "@types/event-stream": { - "version": "3.3.34", - "resolved": "https://registry.npmjs.org/@types/event-stream/-/event-stream-3.3.34.tgz", - "integrity": "sha512-LLiivgWKii4JeMzFy3trrxqkRrVSdue8WmbXyHuSJLwNrhIQU5MTrc65jhxEPwMyh5HR1xevSdD+k2nnSRKw9g==", - "requires": { - "@types/node": "*" - } - }, "@types/express": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", @@ -2688,24 +2778,11 @@ "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", "dev": true }, - "@types/jsesc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@types/jsesc/-/jsesc-2.5.1.tgz", - "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==" - }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, - "@types/jsonstream": { - "version": "0.8.30", - "resolved": "https://registry.npmjs.org/@types/jsonstream/-/jsonstream-0.8.30.tgz", - "integrity": "sha512-KqHs2eAapKL7ZKUiKI/giUYPVgkoDXkVGFehk3goo+3Q8qwxVVRC3iwg+hK/THORbcri4RRxTtlm3JoSY1KZLQ==", - "requires": { - "@types/node": "*" - } - }, "@types/jsonwebtoken": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.6.tgz", @@ -2793,14 +2870,6 @@ "moment": ">=2.14.0" } }, - "@types/mz": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.32.tgz", - "integrity": "sha512-cy3yebKhrHuOcrJGkfwNHhpTXQLgmXSv1BX+4p32j+VUQ6aP2eJ5cL7OvGcAQx75fCTFaAIIAKewvqL+iwSd4g==", - "requires": { - "@types/node": "*" - } - }, "@types/ndjson": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/ndjson/-/ndjson-2.0.1.tgz", @@ -2900,6 +2969,7 @@ "version": "2.48.7", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.7.tgz", "integrity": "sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA==", + "dev": true, "requires": { "@types/caseless": "*", "@types/node": "*", @@ -2911,6 +2981,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -3013,6 +3084,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-2.2.2.tgz", "integrity": "sha512-1AX+Yt3icFuU6kxwmPakaiGrJUwG44MpuiqPg4dSolRFk6jmvs4b3IbUol9wKDLIgU76gevn3EwE8y/DkSJCZQ==", + "dev": true, "requires": { "@types/node": "*" } @@ -3945,27 +4017,6 @@ } } }, - "balena-release": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/balena-release/-/balena-release-3.2.0.tgz", - "integrity": "sha512-jwmAjIZCJ5I46/yQNN+dA73RWlre0+jBVmo2QeJl1pK83obTLyifJeWNVf5irzP8KFE7WQzo9ICK1cCpLtygFA==", - "requires": { - "@types/bluebird": "^3.5.18", - "@types/node": "^8.0.55", - "@types/request": "^2.0.8", - "bluebird": "^3.5.1", - "pinejs-client-request": "^7.1.0", - "resin-compose-parse": "^2.0.0", - "typed-error": "^3.0.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - } - } - }, "balena-request": { "version": "11.5.0", "resolved": "https://registry.npmjs.org/balena-request/-/balena-request-11.5.0.tgz", @@ -4583,6 +4634,12 @@ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" }, + "buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "optional": true + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -5506,6 +5563,24 @@ } } }, + "cpu-features": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "optional": true, + "requires": { + "buildcheck": "0.0.3", + "nan": "^2.15.0" + }, + "dependencies": { + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + } + } + }, "cpy": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cpy/-/cpy-4.0.1.tgz", @@ -6187,48 +6262,6 @@ "lodash": "^4.17.21" } }, - "docker-qemu-transpose": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/docker-qemu-transpose/-/docker-qemu-transpose-1.1.1.tgz", - "integrity": "sha512-GI9NvYFSYsxz1NL2nAJBY7LJxNhJ7X0QfrxHA1wSKyrnTB+lliIIs+KZA9kc8zEMqMorAhS2pC4CQJx5apsEcw==", - "requires": { - "@types/bluebird": "^3.5.30", - "@types/event-stream": "^3.3.34", - "@types/jsesc": "^2.5.0", - "@types/lodash": "^4.14.150", - "@types/node": "^8.10.60", - "bluebird": "^3.7.2", - "common-tags": "^1.8.0", - "docker-file-parser": "^1.0.4", - "event-stream": "^3.3.5", - "jsesc": "^2.5.2", - "lodash": "^4.17.15", - "stream-to-promise": "^2.2.0", - "tar-stream": "^2.1.2", - "tar-utils": "^2.1.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.62", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.62.tgz", - "integrity": "sha512-76fupxOYVxk36kb7O/6KtrAPZ9jnSK3+qisAX4tQMEuGNdlvl7ycwatlHqjoE6jHfVtXFM3pCrCixZOidc5cuw==" - }, - "event-stream": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", - "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", - "requires": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - } - } - }, "docker-toolbelt": { "version": "3.3.8", "resolved": "https://registry.npmjs.org/docker-toolbelt/-/docker-toolbelt-3.3.8.tgz", @@ -6445,14 +6478,14 @@ } }, "dockerfile-template": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dockerfile-template/-/dockerfile-template-0.2.0.tgz", - "integrity": "sha512-tTUY2PINYM1HTbT5t4QjLDcK8nxPLVJvAsNSAkS/Z9nAZzWk5+n4mY1rViqFYgDQgydTzHYt/iKzDX2Mq8KzTQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dockerfile-template/-/dockerfile-template-0.2.1.tgz", + "integrity": "sha512-s9/xxmLlsAg8R9x8M+QYVE/LkFt9v8gvmB2Trl7h2C8VjZVj5C+1CxR+zviTnV+mizFWNj1q/mN8W9cj2RxNaw==", "requires": { - "bluebird": "^3.5.3", - "commander": "^2.8.1", - "errno": "^0.1.4", - "lodash.template": "~3.6.2" + "bluebird": "^3.7.2", + "commander": "^2.20.3", + "errno": "^0.1.8", + "lodash.template": "^4.5.0" } }, "dockerode": { @@ -6604,14 +6637,26 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "ecc-jsbn": { @@ -6678,8 +6723,7 @@ }, "dependencies": { "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "version": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } @@ -7925,9 +7969,9 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fp-ts": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.11.3.tgz", - "integrity": "sha512-qHI5iaVSFNFmdl6yDensWfFMk32iafAINCnqx8m486DV1+Jht/bTnA9CyahL+Xm7h2y3erinviVBIAWvv5bPYw==" + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.12.1.tgz", + "integrity": "sha512-oxvgqUYR6O9VkKXrxkJ0NOyU0FrE705MeqgBUMEPWyTu6Pwn768cJbHChw2XOBlgFLKfIHxjr2OOBFpv2mUGZw==" }, "fragment-cache": { "version": "0.2.1", @@ -8808,8 +8852,7 @@ } }, "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "version": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { "@babel/code-frame": "^7.0.0", @@ -9799,7 +9842,8 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, "json-buffer": { "version": "3.0.1", @@ -10241,41 +10285,23 @@ "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", "dev": true }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=" - }, "lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true }, "lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" - }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -10286,14 +10312,6 @@ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "requires": { - "lodash._root": "^3.0.0" - } - }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", @@ -10314,12 +10332,14 @@ "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true }, "lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true }, "lodash.isboolean": { "version": "3.0.3", @@ -10354,6 +10374,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, "requires": { "lodash._getnative": "^3.0.0", "lodash.isarguments": "^3.0.0", @@ -10366,11 +10387,6 @@ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" - }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", @@ -10378,28 +10394,20 @@ "dev": true }, "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" + "lodash._reinterpolate": "^3.0.0" } }, "lodash.toarray": { @@ -11495,7 +11503,7 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multicast-dns": { - "version": "git+https://github.com/resin-io-modules/multicast-dns.git#db98d68b79bbefc936b6799de9de1038ba49f85d", + "version": "git+https://github.com/resin-io-modules/multicast-dns.git#a15c63464eb43e8925b187ed5cb9de6892e8aacc", "from": "git+https://github.com/resin-io-modules/multicast-dns.git#listen-on-all-interfaces", "requires": { "dns-packet": "^1.0.1", @@ -13174,18 +13182,54 @@ } }, "pinejs-client-request": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/pinejs-client-request/-/pinejs-client-request-7.3.3.tgz", - "integrity": "sha512-HmJfI/yvRB5mrwPedSIMhgcdWco1g4BfGa3bIwEoncOAi808y9FhfPrbcBe1ZjWGtGZTZRE020LpkMaIyigzBg==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/pinejs-client-request/-/pinejs-client-request-7.3.5.tgz", + "integrity": "sha512-A7OFpAASDixcprtBpHInF28oqcFXWeYssOlIVIzIMua6QIL65OVqxVdrkMb9KcAFfgJX9oY8656+Ri4O1w05lA==", "requires": { - "@types/lodash": "^4.14.168", - "@types/lru-cache": "^5.1.0", - "@types/request": "^2.48.5", + "@types/lodash": "^4.14.181", + "@types/lru-cache": "^5.1.1", + "@types/request": "^2.48.8", "lodash": "^4.17.21", "lru-cache": "^6.0.0", - "pinejs-client-core": "^6.9.5", + "pinejs-client-core": "^6.10.2", "request": "^2.88.2", "typed-error": "^3.2.1" + }, + "dependencies": { + "@types/lodash": { + "version": "4.14.182", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", + "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==" + }, + "@types/request": { + "version": "2.48.8", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", + "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==", + "requires": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "pinejs-client-core": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/pinejs-client-core/-/pinejs-client-core-6.10.2.tgz", + "integrity": "sha512-atW5VgmHdAwJGhalhw3hLbjhrjVQDODaSzrwLJYWFHS4M2XlQPdl7xGin4U6moGeVnsUDQe+/qVU8yKJLDgXrQ==", + "requires": { + "@balena/es-version": "^1.0.1" + } + } } }, "pinkie": { @@ -14585,23 +14629,6 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "resin-bundle-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/resin-bundle-resolve/-/resin-bundle-resolve-4.3.0.tgz", - "integrity": "sha512-KPXoLcgtSiuR8CfCxueaAVuSK7KDnf1Fxw+LHTFyzpJ6ZheShPvULmYSx3XK5zmBB8nymte0tSrC2RD+/nn+EA==", - "requires": { - "@types/tar-stream": "^2.1.0", - "bluebird": "^3.7.2", - "bluebird-lru-cache": "^1.0.1", - "dockerfile-template": "^0.2.0", - "lodash": "^4.17.15", - "request": "^2.88.2", - "semver": "^7.1.3", - "strict-event-emitter-types": "^2.0.0", - "tar-stream": "^2.0.1", - "typed-error": "^3.2.0" - } - }, "resin-cli-form": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resin-cli-form/-/resin-cli-form-2.0.2.tgz", @@ -14641,25 +14668,6 @@ } } }, - "resin-compose-parse": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/resin-compose-parse/-/resin-compose-parse-2.1.3.tgz", - "integrity": "sha512-X5WQo+OHoPe+FV8JliGzSIL4glLX0PPFvtnopppYef1UqKcJm+GHaiEZBOj3C7vIEDqQrsNrKXY/BpadlOFiWA==", - "requires": { - "@types/lodash": "^4.14.86", - "@types/node": "^8.0.55", - "ajv": "^6.0.1", - "lodash": "^4.17.4", - "typed-error": "^3.0.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - } - } - }, "resin-device-operations": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/resin-device-operations/-/resin-device-operations-1.7.0.tgz", @@ -14683,268 +14691,27 @@ "lodash": "^4.17.4" } }, - "resin-docker-build": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/resin-docker-build/-/resin-docker-build-1.1.6.tgz", - "integrity": "sha512-657lmKN1SEbaALSb5n1Mr11fze/msSOKH2aFOPBb+L7BxueC7nat5FZ0Jv07ZD0GDTiJo5Z885l6tegMC5+eaQ==", + "resin-doodles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/resin-doodles/-/resin-doodles-0.2.0.tgz", + "integrity": "sha512-k6qfrsXoQC9Xj/iRfceMYeFJKvY94H0AzTmrHvneUgAuWQD6nBUDSRLPEqWFOQlEW/mGUYMFSsRYtYDAsUR3ow==", "requires": { - "@types/bluebird": "^3.5.30", - "@types/dockerode": "^2.5.24", - "@types/duplexify": "^3.6.0", - "@types/event-stream": "^3.3.34", - "@types/jsonstream": "^0.8.30", - "@types/klaw": "^1.3.5", - "@types/lodash": "^4.14.149", - "@types/mz": "0.0.32", - "@types/node": "^10.17.17", - "@types/tar-stream": "^2.1.0", - "JSONStream": "^1.3.5", - "bluebird": "^3.7.2", - "dockerode": "^2.5.8", - "duplexify": "^3.7.1", - "event-stream": "^3.3.5", - "klaw": "^1.3.1", - "lodash": "^4.17.15", - "mz": "^2.7.0", - "tar-stream": "^2.1.0" + "chalk": "^4.1.2" }, "dependencies": { - "@types/dockerode": { - "version": "2.5.34", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-2.5.34.tgz", - "integrity": "sha512-LcbLGcvcBwBAvjH9UrUI+4qotY+A5WCer5r43DR5XHv2ZIEByNXFdPLo1XxR+v/BjkGjlggW8qUiXuVEhqfkpA==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "@types/node": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "@types/klaw": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@types/klaw/-/klaw-1.3.6.tgz", - "integrity": "sha512-4pr2RxwhfsLxFYa4Ip8JxrdXIvPX7fAqyBh9ofZPedMwf8M5CIcSQskqvX6/5Y/zpCBHtuC3218t8H+XJsg5FA==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "docker-modem": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.9.tgz", - "integrity": "sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==", - "requires": { - "JSONStream": "1.3.2", - "debug": "^3.2.6", - "readable-stream": "~1.0.26-4", - "split-ca": "^1.0.0" - }, - "dependencies": { - "JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - } - } - }, - "dockerode": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.8.tgz", - "integrity": "sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==", - "requires": { - "concat-stream": "~1.6.2", - "docker-modem": "^1.0.8", - "tar-fs": "~1.16.3" - } - }, - "event-stream": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", - "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", - "requires": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "requires": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - } - } - } - } - }, - "resin-doodles": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/resin-doodles/-/resin-doodles-0.2.0.tgz", - "integrity": "sha512-k6qfrsXoQC9Xj/iRfceMYeFJKvY94H0AzTmrHvneUgAuWQD6nBUDSRLPEqWFOQlEW/mGUYMFSsRYtYDAsUR3ow==", - "requires": { - "chalk": "^4.1.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", @@ -14956,206 +14723,6 @@ } } }, - "resin-multibuild": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/resin-multibuild/-/resin-multibuild-4.12.2.tgz", - "integrity": "sha512-FkRqGEM588wA6v03pQbodPqWQdAs6aMh+GWvYQBz5IxqSVecn4FLHaRE0pF6VFKtjf/XBuPw7dtqiFzH+NIz5g==", - "requires": { - "ajv": "^6.12.3", - "bluebird": "^3.7.2", - "docker-progress": "^5.0.0", - "dockerfile-ast": "^0.2.1", - "dockerfile-template": "^0.2.0", - "dockerode": "^2.5.8", - "fp-ts": "^2.8.1", - "io-ts": "^2.2.9", - "io-ts-reporters": "^1.2.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.19", - "resin-bundle-resolve": "^4.3.0", - "resin-compose-parse": "^2.1.2", - "resin-docker-build": "^1.1.5", - "semver": "^7.3.5", - "tar-stream": "^2.1.3", - "tar-utils": "^2.1.0", - "typed-error": "^3.2.1" - }, - "dependencies": { - "JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "docker-modem": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.9.tgz", - "integrity": "sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==", - "requires": { - "JSONStream": "1.3.2", - "debug": "^3.2.6", - "readable-stream": "~1.0.26-4", - "split-ca": "^1.0.0" - } - }, - "dockerode": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.8.tgz", - "integrity": "sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==", - "requires": { - "concat-stream": "~1.6.2", - "docker-modem": "^1.0.8", - "tar-fs": "~1.16.3" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "requires": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - } - } - } - } - }, "resin-stream-logger": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/resin-stream-logger/-/resin-stream-logger-0.1.2.tgz", @@ -17627,9 +17194,9 @@ } }, "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" }, "wcwidth": { "version": "1.0.1", diff --git a/package.json b/package.json index 15e7ffd10c..a26ae8d068 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "node_modules/balena-sdk/es2018/index.js", "node_modules/balena-sync/build/**/*.js", "node_modules/pinejs-client-request/node_modules/pinejs-client-core/es2018/index.js", - "node_modules/resin-compose-parse/build/schemas/*.json" + "node_modules/@balena/compose/dist/parse/schemas/*.json" ], "assets": [ "build/auth/pages/*.ejs", @@ -194,6 +194,7 @@ "typescript": "^4.6.4" }, "dependencies": { + "@balena/compose": "0.1.0-import-modules-8d785f8e4263f509744497389cf5af545aab2d29", "@balena/dockerignore": "^1.0.2", "@balena/es-version": "^1.0.1", "@oclif/command": "^1.8.16", @@ -208,7 +209,6 @@ "balena-image-fs": "^7.0.6", "balena-image-manager": "^7.1.1", "balena-preload": "^12.1.0", - "balena-release": "^3.2.0", "balena-sdk": "^16.22.0", "balena-semver": "^2.3.0", "balena-settings-client": "^4.0.7", @@ -226,7 +226,6 @@ "denymount": "^2.3.0", "docker-modem": "3.0.0", "docker-progress": "^5.1.3", - "docker-qemu-transpose": "^1.1.1", "dockerode": "^3.3.1", "ejs": "^3.1.6", "etcher-sdk": "^6.2.1", @@ -264,9 +263,7 @@ "request": "^2.88.2", "resin-cli-form": "^2.0.2", "resin-cli-visuals": "^1.8.0", - "resin-compose-parse": "^2.1.3", "resin-doodles": "^0.2.0", - "resin-multibuild": "^4.12.2", "resin-stream-logger": "^0.1.2", "rimraf": "^3.0.2", "semver": "^7.3.5", diff --git a/repo.yml b/repo.yml index b34cf9828c..fb68050408 100644 --- a/repo.yml +++ b/repo.yml @@ -14,7 +14,7 @@ upstream: url: 'https://github.com/balena-io-modules/balena-sync' - repo: 'etcher-sdk' url: 'https://github.com/balena-io-modules/etcher-sdk/' - - repo: 'resin-compose-parse' - url: 'https://github.com/balena-io-modules/resin-compose-parse' + - repo: 'balena-compose' + url: 'https://github.com/balena-io-modules/balena-compose' - repo: 'docker-progress' url: 'https://github.com/balena-io-modules/docker-progress' diff --git a/tests/commands/deploy.spec.ts b/tests/commands/deploy.spec.ts index 4d8919f852..7d051fec64 100644 --- a/tests/commands/deploy.spec.ts +++ b/tests/commands/deploy.spec.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import type { Request as ReleaseRequest } from 'balena-release'; +import type { Request as ReleaseRequest } from '@balena/compose/dist/release'; import { expect } from 'chai'; import { promises as fs } from 'fs'; import * as _ from 'lodash'; @@ -291,7 +291,7 @@ describe('balena deploy', function () { statusCode: 500, inspectRequest: (_uri, requestBody) => { const imageBody = requestBody as Partial< - import('balena-release/build/models').ImageModel + import('@balena/compose/dist/release/models').ImageModel >; expect(imageBody.status).to.equal('success'); }, @@ -300,7 +300,7 @@ describe('balena deploy', function () { api.expectPatchRelease({ inspectRequest: (_uri, requestBody) => { const releaseBody = requestBody as Partial< - import('balena-release/build/models').ReleaseModel + import('@balena/compose/dist/release/models').ReleaseModel >; expect(releaseBody.status).to.equal('failed'); }, diff --git a/tests/docker-build.ts b/tests/docker-build.ts index 4a44c79afa..a8006f77e6 100644 --- a/tests/docker-build.ts +++ b/tests/docker-build.ts @@ -19,7 +19,7 @@ import { expect } from 'chai'; import * as _ from 'lodash'; import { promises as fs } from 'fs'; import * as path from 'path'; -import { PathUtils } from 'resin-multibuild'; +import { PathUtils } from '@balena/compose/dist/multibuild'; import rewire = require('rewire'); import * as sinon from 'sinon'; import { Readable } from 'stream'; diff --git a/tests/test-data/pkg/expected-warnings-darwin.txt b/tests/test-data/pkg/expected-warnings-darwin.txt index 5506c51b7f..3d3cb304d8 100644 --- a/tests/test-data/pkg/expected-warnings-darwin.txt +++ b/tests/test-data/pkg/expected-warnings-darwin.txt @@ -64,6 +64,12 @@ The file must be distributed with executable as %2. %1: node_modules/patch-package/node_modules/open/xdg-open %2: path-to-executable/xdg-open +> Warning Cannot resolve 'path' + node_modules/@balena/compose/dist/parse/schemas/index.js + Dynamic require may fail at run time, because the requested file + is unknown at compilation time and not included into executable. + Use a string literal as an argument for 'require', or leave it + as is and specify the resolved file name in 'scripts' option. > Warning Cannot include file %1 into executable. The file must be distributed with executable as %2. %1: node_modules/drivelist/build/Release/drivelist.node diff --git a/tests/test-data/pkg/expected-warnings-linux.txt b/tests/test-data/pkg/expected-warnings-linux.txt index 5506c51b7f..3d3cb304d8 100644 --- a/tests/test-data/pkg/expected-warnings-linux.txt +++ b/tests/test-data/pkg/expected-warnings-linux.txt @@ -64,6 +64,12 @@ The file must be distributed with executable as %2. %1: node_modules/patch-package/node_modules/open/xdg-open %2: path-to-executable/xdg-open +> Warning Cannot resolve 'path' + node_modules/@balena/compose/dist/parse/schemas/index.js + Dynamic require may fail at run time, because the requested file + is unknown at compilation time and not included into executable. + Use a string literal as an argument for 'require', or leave it + as is and specify the resolved file name in 'scripts' option. > Warning Cannot include file %1 into executable. The file must be distributed with executable as %2. %1: node_modules/drivelist/build/Release/drivelist.node diff --git a/tests/test-data/pkg/expected-warnings-win32.txt b/tests/test-data/pkg/expected-warnings-win32.txt index 5d788d41ba..3dcf74e802 100644 --- a/tests/test-data/pkg/expected-warnings-win32.txt +++ b/tests/test-data/pkg/expected-warnings-win32.txt @@ -64,6 +64,12 @@ The file must be distributed with executable as %2. %1: node_modules\patch-package\node_modules\open\xdg-open %2: path-to-executable/xdg-open +> Warning Cannot resolve 'path' + node_modules\@balena\compose\dist\parse\schemas\index.js + Dynamic require may fail at run time, because the requested file + is unknown at compilation time and not included into executable. + Use a string literal as an argument for 'require', or leave it + as is and specify the resolved file name in 'scripts' option. > Warning Cannot include file %1 into executable. The file must be distributed with executable as %2. %1: node_modules\drivelist\build\Release\drivelist.node diff --git a/tests/utils/device/live.spec.ts b/tests/utils/device/live.spec.ts index e8947e3cd7..9a6e844131 100644 --- a/tests/utils/device/live.spec.ts +++ b/tests/utils/device/live.spec.ts @@ -79,7 +79,7 @@ describeSS('LivepushManager::setupFilesystemWatcher', function () { async function createMonitors( projectPath: string, - composition: import('resin-compose-parse').Composition, + composition: import('@balena/compose/dist/parse').Composition, multiDockerignore: boolean, changedPathHandler: (serviceName: string, changedPath: string) => void, ): Promise> { diff --git a/tests/utils/qemu.spec.ts b/tests/utils/qemu.spec.ts index 7d8af509e1..fc38de3c74 100644 --- a/tests/utils/qemu.spec.ts +++ b/tests/utils/qemu.spec.ts @@ -17,9 +17,11 @@ import { expect } from 'chai'; -describe('resin-multibuild consistency', function () { +describe('@balena/compose/multibuild consistency', function () { it('should use the same values for selected constants', async () => { - const { QEMU_BIN_NAME: MQEMU_BIN_NAME } = await import('resin-multibuild'); + const { QEMU_BIN_NAME: MQEMU_BIN_NAME } = await import( + '@balena/compose/dist/multibuild' + ); const { QEMU_BIN_NAME } = await import('../../build/utils/qemu'); expect(QEMU_BIN_NAME).to.equal(MQEMU_BIN_NAME); });