has-dynamic-import
Version:
Does the current environment have `import()` support?
109 lines (85 loc) • 2.78 kB
JavaScript
;
var test = require('tape');
var semver = require('semver');
var isBrowser = typeof window !== 'undefined';
var isNode = !isBrowser && typeof process !== 'undefined';
var spawnSync = isNode && require('child_process').spawnSync; // eslint-disable-line global-require
var hasFullSupport = require('../');
var hasSyntax = require('../syntax');
var browserHasFullSupport = require('../browser');
var browserHasSyntax = require('../browser-syntax');
test('hasFullSupport', function (t) {
t.equal(typeof hasFullSupport, 'function', 'is a function');
t.test('node', { skip: !isNode }, function (st) {
var promise = hasFullSupport();
st.equal(typeof promise.then, 'function', 'returns a thenable');
promise.then(function (result) {
st.equal(
result,
semver.satisfies(process.version, '^12.17 || ^13.2 || >=14'),
'result matches expected node version range'
);
st.end();
});
});
t.test('experimental warning', { skip: !spawnSync || !!process.env.RECURSION }, function (st) {
st.plan(1);
var NODE_OPTIONS = semver.satisfies(process.version, '>=22') ? '--disable-warning=DEP0060' : '';
// @ts-expect-error ts(2349) TS can't narrow based on tape's `skip`
var res = spawnSync('node', ['test'], {
env: { PATH: process.env.PATH, NODE_OPTIONS: NODE_OPTIONS, RECURSION: 'recursion' }
});
if (semver.satisfies(process.version, '^12.17 <12.20 || ^13.4 < 13.14')) {
st.ok(String(res.stderr), 'stderr has an experimental warning in it');
} else {
st.equal(String(res.stderr), '', 'stderr is empty');
}
});
t.test('browser', function (st) {
var promise = browserHasFullSupport();
st.equal(typeof promise.then, 'function', 'returns a thenable');
promise.then(function (result) {
hasFullSupport().then(function (nodeResult) {
st.equal(
result,
nodeResult,
'matches result from node implementation'
);
st.end();
});
});
});
t.test('browser', function (st) {
var result = browserHasSyntax();
st.equal(typeof result, 'boolean', 'returns a boolean');
st.equal(
result,
hasSyntax(),
'matches result from node implementation'
);
st.end();
});
});
test('hasSyntax', function (t) {
t.equal(typeof hasSyntax, 'function', 'is a function');
t.test('node', { skip: !isNode }, function (st) {
var result = hasSyntax();
st.equal(typeof result, 'boolean', 'returns a boolean');
st.equal(
result,
semver.satisfies(process.version, '>=10'),
'result matches expected node version range'
);
st.end();
});
t.test('browser', function (st) {
var result = browserHasSyntax();
st.equal(typeof result, 'boolean', 'returns a boolean');
st.equal(
result,
hasSyntax(),
'matches result from node implementation'
);
st.end();
});
});