Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 26 additions & 15 deletions commands/upgrade.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export type UpgradeArgs = {
root: string,
args: Array<string>,
interactive?: boolean,
skipInstall?: boolean,
};
export type Upgrade = (UpgradeArgs) => Promise<void>;
type ExternalDep = {name: string, range?: string};
Expand All @@ -27,7 +28,12 @@ type RemoveTypesPackage = (string, Array<string>) => Promise<void>;
type PromptForTypesVersion = (string, ?string, Array<string>, boolean) => Promise<?string>;
*/

const upgrade /*: Upgrade */ = async ({root, args, interactive = true}) => {
const upgrade /*: Upgrade */ = async ({
root,
args,
interactive = true,
skipInstall = false,
}) => {
const {projects} = await getManifest({root});
const roots = projects.map(dir => `${root}/${dir}`);

Expand Down Expand Up @@ -73,21 +79,26 @@ const upgrade /*: Upgrade */ = async ({root, args, interactive = true}) => {
});

// Add @types packages
const typesDeps = await getTypesPackages(
externals,
root,
roots,
promptForTypesVersion
);
// In non-interactive mode, skip prompting (return null to skip package)
const promptFn = interactive
? promptForTypesVersion
: async (name, range, versions, shouldPrompt) => {
console.log(`Skipping ${name} (non-interactive mode)`);
return null;
};

await spawn(
node,
[yarn, 'up', '-C', ...deps, ...typesDeps, '--mode', 'skip-build'],
{
cwd: root,
stdio: 'inherit',
}
);
const typesDeps = await getTypesPackages(externals, root, roots, promptFn);

if (!skipInstall) {
await spawn(
node,
[yarn, 'up', '-C', ...deps, ...typesDeps, '--mode', 'skip-build'],
{
cwd: root,
stdio: 'inherit',
}
);
}
}
};

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "jazelle",
"version": "0.0.0-standalone.102",
"version": "0.0.0-standalone.103",
"main": "index.js",
"bin": {
"barn": "bin/bootstrap.sh",
Expand Down
10 changes: 7 additions & 3 deletions tests/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -452,25 +452,29 @@ async function testUpgrade() {
}

async function testUpgradeTypes() {
const meta = `${tmp}/tmp/upgrade-types/test-app/package.json`;
const cmd = `cp -r ${__dirname}/fixtures/upgrade-types/ ${tmp}/tmp/upgrade-types`;
await exec(cmd);

// Test 1: Upgrade package that might need @types (lodash)
// Note: skipInstall means package.json won't be updated (yarn doesn't run)
// We're just testing @types detection logic here
await upgrade({
root: `${tmp}/tmp/upgrade-types`,
args: ['lodash@4.17.21'],
interactive: false,
skipInstall: true,
});
assert((await read(meta, 'utf8')).includes('"lodash": "4.17.21"'));
// Can't assert package.json changes since skipInstall means yarn up doesn't run
// The @types detection happens before yarn up, so that's what we're testing

// Test 2: Upgrade @types package directly (should skip @types handling)
await upgrade({
root: `${tmp}/tmp/upgrade-types`,
args: ['@types/lodash@4.14.182'],
interactive: false,
skipInstall: true,
});
assert((await read(meta, 'utf8')).includes('"@types/lodash"'));
// Can't assert package.json changes since skipInstall means yarn up doesn't run

// Test 3: Verify @types packages are handled correctly in args parsing
const testArg = '@types/react@18.0.0';
Expand Down
8 changes: 3 additions & 5 deletions utils/types-manager.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// @flow
const {maxSatisfying, rsort} = require('../vendor/semver/semver.js');
const {exec} = require('./node-helpers.js');
const {node, yarn} = require('./binary-paths.js');

/*::
type ExternalDep = {name: string, range?: string};
Expand Down Expand Up @@ -34,7 +33,7 @@ const checkBundledTypes /*: CheckBundledTypes */ = async (
) => {
try {
const versionSpec = versionRange || 'latest';
const cmd = `${node} ${yarn} info ${packageName}@${versionSpec} --json`;
const cmd = `npm view ${packageName}@${versionSpec} --json`;
const result = await exec(cmd, {cwd: root, maxBuffer: MAX_BUFFER_SIZE});
const data = JSON.parse(result.trim());
return !!(data.types || data.typings);
Expand All @@ -53,11 +52,10 @@ const findBestTypesVersion /*: FindBestTypesVersion */ = async (
promptForTypesVersion
) => {
try {
// Get all versions
const cmd = `${node} ${yarn} info ${typesPackageName} versions --json`;
const cmd = `npm view ${typesPackageName} versions --json`;
const result = await exec(cmd, {cwd: root, maxBuffer: MAX_BUFFER_SIZE});
const data = JSON.parse(result.trim());
const versions = data.versions || data || [];
const versions = data || [];

if (versions.length === 0) {
console.warn(`No versions found for ${typesPackageName}`);
Expand Down
4 changes: 2 additions & 2 deletions utils/upgrade-prompts.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// @flow
const prompts = require('prompts');
const {rsort} = require('semver');
const prompts = require('../vendor/prompts');
const {rsort} = require('../vendor/semver');

/*::
type PromptForTypesVersion = (
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/autocomplete.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

const color = require('kleur');
const color = require('../../../kleur');

const Prompt = require('./prompt');

const _require = require('sisteransi'),
const _require = require('../../../sisteransi'),
erase = _require.erase,
cursor = _require.cursor;

Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/autocompleteMultiselect.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
'use strict';

const color = require('kleur');
const color = require('../../../kleur');

const _require = require('sisteransi'),
const _require = require('../../../sisteransi'),
cursor = _require.cursor;

const MultiselectPrompt = require('./multiselect');
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/confirm.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
"use strict";

const color = require('kleur');
const color = require('../../../kleur');

const Prompt = require('./prompt');

const _require = require('../util'),
style = _require.style,
clear = _require.clear;

const _require2 = require('sisteransi'),
const _require2 = require('../../../sisteransi'),
erase = _require2.erase,
cursor = _require2.cursor;
/**
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/date.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

const color = require('kleur');
const color = require('../../../kleur');

const Prompt = require('./prompt');

Expand All @@ -13,7 +13,7 @@ const _require = require('../util'),
clear = _require.clear,
figures = _require.figures;

const _require2 = require('sisteransi'),
const _require2 = require('../../../sisteransi'),
erase = _require2.erase,
cursor = _require2.cursor;

Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/multiselect.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
'use strict';

const color = require('kleur');
const color = require('../../../kleur');

const _require = require('sisteransi'),
const _require = require('../../../sisteransi'),
cursor = _require.cursor;

const Prompt = require('./prompt');
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/number.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

const color = require('kleur');
const color = require('../../../kleur');

const Prompt = require('./prompt');

const _require = require('sisteransi'),
const _require = require('../../../sisteransi'),
cursor = _require.cursor,
erase = _require.erase;

Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/prompt.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ const _require = require('../util'),

const EventEmitter = require('events');

const _require2 = require('sisteransi'),
const _require2 = require('../../../sisteransi'),
beep = _require2.beep,
cursor = _require2.cursor;

const color = require('kleur');
const color = require('../../../kleur');
/**
* Base prompt skeleton
* @param {Stream} [opts.stdin] The Readable stream to listen to
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/select.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const color = require('kleur');
const color = require('../../../kleur');

const Prompt = require('./prompt');

Expand All @@ -11,7 +11,7 @@ const _require = require('../util'),
wrap = _require.wrap,
entriesToDisplay = _require.entriesToDisplay;

const _require2 = require('sisteransi'),
const _require2 = require('../../../sisteransi'),
cursor = _require2.cursor;
/**
* SelectPrompt Base Element
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/text.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

const color = require('kleur');
const color = require('../../../kleur');

const Prompt = require('./prompt');

const _require = require('sisteransi'),
const _require = require('../../../sisteransi'),
erase = _require.erase,
cursor = _require.cursor;

Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/dist/elements/toggle.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
"use strict";

const color = require('kleur');
const color = require('../../../kleur');

const Prompt = require('./prompt');

const _require = require('../util'),
style = _require.style,
clear = _require.clear;

const _require2 = require('sisteransi'),
const _require2 = require('../../../sisteransi'),
cursor = _require2.cursor,
erase = _require2.erase;
/**
Expand Down
2 changes: 1 addition & 1 deletion vendor/prompts/dist/util/clear.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len

const strip = require('./strip');

const _require = require('sisteransi'),
const _require = require('../../../sisteransi'),
erase = _require.erase,
cursor = _require.cursor;

Expand Down
2 changes: 1 addition & 1 deletion vendor/prompts/dist/util/style.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const c = require('kleur');
const c = require('../../../kleur');

const figures = require('./figures'); // rendering user input.

Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/lib/elements/autocomplete.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
'use strict';

const color = require('kleur');
const color = require('../../../kleur');
const Prompt = require('./prompt');
const { erase, cursor } = require('sisteransi');
const { erase, cursor } = require('../../../sisteransi');
const { style, clear, figures, wrap, entriesToDisplay } = require('../util');

const getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/lib/elements/autocompleteMultiselect.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

const color = require('kleur');
const { cursor } = require('sisteransi');
const color = require('../../../kleur');
const { cursor } = require('../../../sisteransi');
const MultiselectPrompt = require('./multiselect');
const { clear, style, figures } = require('../util');
/**
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/lib/elements/confirm.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const color = require('kleur');
const color = require('../../../kleur');
const Prompt = require('./prompt');
const { style, clear } = require('../util');
const { erase, cursor } = require('sisteransi');
const { erase, cursor } = require('../../../sisteransi');

/**
* ConfirmPrompt Base Element
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/lib/elements/date.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use strict';

const color = require('kleur');
const color = require('../../../kleur');
const Prompt = require('./prompt');
const { style, clear, figures } = require('../util');
const { erase, cursor } = require('sisteransi');
const { erase, cursor } = require('../../../sisteransi');
const { DatePart, Meridiem, Day, Hours, Milliseconds, Minutes, Month, Seconds, Year } = require('../dateparts');

const regex = /\\(.)|"((?:\\["\\]|[^"])+)"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/lib/elements/multiselect.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

const color = require('kleur');
const { cursor } = require('sisteransi');
const color = require('../../../kleur');
const { cursor } = require('../../../sisteransi');
const Prompt = require('./prompt');
const { clear, figures, style, wrap, entriesToDisplay } = require('../util');

Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/lib/elements/number.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const color = require('kleur');
const color = require('../../../kleur');
const Prompt = require('./prompt');
const { cursor, erase } = require('sisteransi');
const { cursor, erase } = require('../../../sisteransi');
const { style, figures, clear, lines } = require('../util');

const isNumber = /[0-9]/;
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/lib/elements/prompt.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
const readline = require('readline');
const { action } = require('../util');
const EventEmitter = require('events');
const { beep, cursor } = require('sisteransi');
const color = require('kleur');
const { beep, cursor } = require('../../../sisteransi');
const color = require('../../../kleur');

/**
* Base prompt skeleton
Expand Down
4 changes: 2 additions & 2 deletions vendor/prompts/lib/elements/select.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use strict';

const color = require('kleur');
const color = require('../../../kleur');
const Prompt = require('./prompt');
const { style, clear, figures, wrap, entriesToDisplay } = require('../util');
const { cursor } = require('sisteransi');
const { cursor } = require('../../../sisteransi');

/**
* SelectPrompt Base Element
Expand Down
Loading