Make the scripts buildable to allow typescript within (#403)
* move scripts to be building via TypeScript * convert scripts to build using typescript * move babel up to scripts root for direct inclusion * remove unused use of depcheck task from build-tools
This commit is contained in:
Родитель
3b0afb1c7e
Коммит
580825d7ae
|
@ -1,4 +1,5 @@
|
|||
module.exports = {
|
||||
npmClient: 'yarn',
|
||||
pipeline: {
|
||||
['build-tools']: ['^build-tools'],
|
||||
build: ['build-tools', '^build'],
|
||||
|
@ -9,6 +10,6 @@ module.exports = {
|
|||
lint: ['build-tools'],
|
||||
['verify-api']: [],
|
||||
['update-api']: [],
|
||||
test: ['build-tools', 'lint', 'build']
|
||||
}
|
||||
test: ['build-tools', 'lint', 'build'],
|
||||
},
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// @ts-check
|
||||
|
||||
const { task, series, parallel, option, argv, tscTask, cleanTask, eslintTask } = require('just-scripts');
|
||||
const { depcheckTask } = require('@uifabricshared/build-native/tasks/depcheck');
|
||||
|
||||
const path = require('path');
|
||||
|
||||
|
@ -18,8 +17,8 @@ module.exports = function preset() {
|
|||
target: 'es6',
|
||||
outDir: 'lib',
|
||||
module: 'commonjs',
|
||||
...(argv().production && { inlineSources: true, sourceRoot: path.relative(libPath, srcPath) })
|
||||
})
|
||||
...(argv().production && { inlineSources: true, sourceRoot: path.relative(libPath, srcPath) }),
|
||||
}),
|
||||
);
|
||||
|
||||
task('lint', eslintTask({ files: ['src/.'] }));
|
||||
|
@ -27,5 +26,4 @@ module.exports = function preset() {
|
|||
task('build', series('cleanlib', parallel('lint', 'ts')));
|
||||
task('no-op', () => {});
|
||||
task('clean', 'no-op');
|
||||
task('depcheck', depcheckTask);
|
||||
};
|
||||
|
|
|
@ -5,7 +5,7 @@ module.exports = {
|
|||
['@babel/preset-env', { targets: { node: 'current' } }],
|
||||
'@babel/preset-react',
|
||||
'@babel/preset-typescript',
|
||||
'module:metro-react-native-babel-preset'
|
||||
'module:metro-react-native-babel-preset',
|
||||
],
|
||||
plugins: [
|
||||
[
|
||||
|
@ -37,9 +37,9 @@ module.exports = {
|
|||
'.win32.tsx',
|
||||
'.windows.js',
|
||||
'.windows.ts',
|
||||
'.windows.tsx'
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
'.windows.tsx',
|
||||
],
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
module.exports = {
|
||||
extends: [
|
||||
'plugin:@typescript-eslint/recommended'
|
||||
],
|
||||
parser: '@typescript-eslint/parser',
|
||||
plugins: [
|
||||
'@typescript-eslint',
|
||||
],
|
||||
rules: {
|
||||
"@typescript-eslint/adjacent-overload-signatures": "off",
|
||||
"@typescript-eslint/ban-ts-ignore": "off",
|
||||
"@typescript-eslint/ban-types": "off",
|
||||
"camelcase": "off",
|
||||
"@typescript-eslint/camelcase": "off",
|
||||
"@typescript-eslint/class-name-casing": "off",
|
||||
"@typescript-eslint/consistent-type-assertions": "off",
|
||||
"@typescript-eslint/explicit-function-return-type": "off",
|
||||
"@typescript-eslint/interface-name-prefix": "off",
|
||||
"@typescript-eslint/member-delimiter-style": "off",
|
||||
"no-array-constructor": "off",
|
||||
"@typescript-eslint/no-array-constructor": "off",
|
||||
"no-empty-function": "off",
|
||||
"@typescript-eslint/no-empty-function": "off",
|
||||
"@typescript-eslint/no-empty-interface": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-inferrable-types": "off",
|
||||
"@typescript-eslint/no-misused-new": "off",
|
||||
"@typescript-eslint/no-namespace": "off",
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"@typescript-eslint/no-this-alias": "off",
|
||||
"no-unused-vars": "off",
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
"no-use-before-define": "off",
|
||||
"@typescript-eslint/no-use-before-define": "off",
|
||||
"@typescript-eslint/no-var-requires": "off",
|
||||
"@typescript-eslint/prefer-namespace-keyword": "off",
|
||||
"@typescript-eslint/triple-slash-reference": "off",
|
||||
"@typescript-eslint/type-annotation-spacing": "off",
|
||||
"no-var": "off",
|
||||
"prefer-const": "off",
|
||||
"prefer-rest-params": "off",
|
||||
"prefer-spread": "off",
|
||||
"no-undef": "error"
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
module.exports = {
|
||||
preset: require('./just.config'),
|
||||
preset: require('./lib/justPreset'),
|
||||
just: require('just-scripts'),
|
||||
eslintPreset: require('./eslintrc'),
|
||||
...require('@fluentui-react-native/build-tools')
|
||||
eslintPreset: require('./lib/eslintrc'),
|
||||
...require('@fluentui-react-native/build-tools'),
|
||||
};
|
||||
|
|
|
@ -1,95 +1,30 @@
|
|||
// @ts-check
|
||||
|
||||
const { task, series, parallel, condition, option, argv, addResolvePath, prettierCheckTask, prettierTask } = require('just-scripts');
|
||||
const { task, series, parallel, option, argv, tscTask, cleanTask, eslintTask } = require('just-scripts');
|
||||
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
const { clean } = require('./tasks/clean');
|
||||
const { copy } = require('./tasks/copy');
|
||||
const { jest } = require('./tasks/jest');
|
||||
const { ts } = require('./tasks/ts');
|
||||
const { eslint } = require('./tasks/eslint');
|
||||
const { webpack, webpackDevServer } = require('./tasks/webpack');
|
||||
const { metroTask } = require('@fluentui-react-native/build-tools');
|
||||
const { verifyApiExtractor, updateApiExtractor } = require('./tasks/api-extractor');
|
||||
const checkForModifiedFiles = require('./tasks/check-for-modified-files');
|
||||
const { depcheckTask } = require('./tasks/depcheck');
|
||||
|
||||
function fileExists(path) {
|
||||
try {
|
||||
return fs.existsSync(path);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const srcPath = path.join(process.cwd(), 'src');
|
||||
const libPath = path.join(process.cwd(), 'lib');
|
||||
|
||||
module.exports = function preset() {
|
||||
// this add s a resolve path for the build tooling deps like TS from the scripts folder
|
||||
addResolvePath(__dirname);
|
||||
|
||||
option('production');
|
||||
|
||||
// Adds an alias for 'npm-install-mode' for backwards compatibility
|
||||
option('min', { alias: 'npm-install-mode' });
|
||||
|
||||
option('webpackConfig', { alias: 'w' });
|
||||
|
||||
// Build only commonjs (not other TS variants) but still run other tasks
|
||||
option('commonjs');
|
||||
|
||||
// use Metro for bundling task instead of the default webpack
|
||||
option('useMetro');
|
||||
option('dev');
|
||||
option('platform', { type: 'string' });
|
||||
option('bundleName', { type: 'string' });
|
||||
option('server');
|
||||
option('port', { type: 'number' });
|
||||
option('cli');
|
||||
|
||||
// for options that have a check/fix switch this puts them into fix mode
|
||||
option('fix');
|
||||
|
||||
task('clean', clean);
|
||||
task('copy', copy);
|
||||
task('jest', jest);
|
||||
task('ts:commonjs', ts.commonjs);
|
||||
task('ts:esm', ts.esm);
|
||||
task('eslint', eslint);
|
||||
task('ts:commonjs-only', ts.commonjsOnly);
|
||||
task('webpack', webpack);
|
||||
task('webpack-dev-server', webpackDevServer);
|
||||
task('verify-api-extractor', verifyApiExtractor);
|
||||
task('update-api-extractor', updateApiExtractor);
|
||||
task('prettier', () => (argv().fix ? prettierTask : prettierCheckTask));
|
||||
task('check-for-modified-files', checkForModifiedFiles);
|
||||
task('tsall', parallel('ts:commonjs', 'ts:esm'));
|
||||
task('ts', series(condition('ts:commonjs-only', () => !!argv().commonjs), condition('tsall', () => !argv().commonjs)));
|
||||
|
||||
task('validate', parallel('eslint', condition('jest', () => fileExists(path.join(process.cwd(), 'jest.config.js')))));
|
||||
|
||||
task('code-style', series('prettier', 'eslint'));
|
||||
task('update-api', series('clean', 'copy', 'ts', 'update-api-extractor'));
|
||||
task('dev', series('clean', 'copy', 'webpack-dev-server'));
|
||||
|
||||
task('build:node-lib', series('clean', 'copy', series(condition('validate', () => !argv().min), 'ts:commonjs-only')));
|
||||
|
||||
task('metro', () =>
|
||||
metroTask({
|
||||
dev: !!argv().dev,
|
||||
...(argv().cli && { cli: true }),
|
||||
...(argv().platform && { platform: argv().platform }),
|
||||
...(argv().bundleName && { bundleName: argv().bundleName }),
|
||||
...(argv().server && { server: true }),
|
||||
...(argv().server && argv().port && { port: argv().port })
|
||||
})
|
||||
task(
|
||||
'ts',
|
||||
tscTask({
|
||||
pretty: true,
|
||||
allowJs: true,
|
||||
target: 'es6',
|
||||
outDir: 'lib',
|
||||
module: 'commonjs',
|
||||
...(argv().production && { inlineSources: true, sourceRoot: path.relative(libPath, srcPath) }),
|
||||
}),
|
||||
);
|
||||
|
||||
task('bundle', series(condition('metro', () => !!argv().useMetro), condition('webpack', () => !argv().useMetro)));
|
||||
|
||||
task('build', series('clean', 'copy', 'ts'));
|
||||
|
||||
task('depcheck', depcheckTask);
|
||||
|
||||
task('lint', eslintTask({ files: ['src/.'] }));
|
||||
task('cleanlib', cleanTask([libPath]));
|
||||
task('build', series('cleanlib', parallel('lint', 'ts')));
|
||||
task('no-op', () => {});
|
||||
task('clean', 'no-op');
|
||||
};
|
||||
|
|
|
@ -2,16 +2,15 @@
|
|||
"name": "@uifabricshared/build-native",
|
||||
"version": "0.1.1",
|
||||
"private": true,
|
||||
"main": "./index.js",
|
||||
"main": "./lib/index.js",
|
||||
"bin": {
|
||||
"fluentui-scripts": "./just-scripts.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node ./just-scripts.js no-op",
|
||||
"build-tools": "just-scripts build",
|
||||
"bundlesize": "bundlesize --debug",
|
||||
"clean": "node ./just-scripts.js no-op",
|
||||
"code-style": "node ./just-scripts.js code-style",
|
||||
"prettier": "node ./just-scripts.js prettier",
|
||||
"code-style": "node ./lib/just-scripts.js code-style",
|
||||
"prettier": "node ./lib/just-scripts.js prettier",
|
||||
"verify-api": "echo no api to verify",
|
||||
"update-api": "echo no api to update"
|
||||
},
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
export const eslintPreset = {
|
||||
extends: ['plugin:@typescript-eslint/recommended'],
|
||||
parser: '@typescript-eslint/parser',
|
||||
plugins: ['@typescript-eslint'],
|
||||
rules: {
|
||||
'@typescript-eslint/adjacent-overload-signatures': 'off',
|
||||
'@typescript-eslint/ban-ts-ignore': 'off',
|
||||
'@typescript-eslint/ban-types': 'off',
|
||||
camelcase: 'off',
|
||||
'@typescript-eslint/camelcase': 'off',
|
||||
'@typescript-eslint/class-name-casing': 'off',
|
||||
'@typescript-eslint/consistent-type-assertions': 'off',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/interface-name-prefix': 'off',
|
||||
'@typescript-eslint/member-delimiter-style': 'off',
|
||||
'no-array-constructor': 'off',
|
||||
'@typescript-eslint/no-array-constructor': 'off',
|
||||
'no-empty-function': 'off',
|
||||
'@typescript-eslint/no-empty-function': 'off',
|
||||
'@typescript-eslint/no-empty-interface': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/no-inferrable-types': 'off',
|
||||
'@typescript-eslint/no-misused-new': 'off',
|
||||
'@typescript-eslint/no-namespace': 'off',
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
'@typescript-eslint/no-this-alias': 'off',
|
||||
'no-unused-vars': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
'no-use-before-define': 'off',
|
||||
'@typescript-eslint/no-use-before-define': 'off',
|
||||
'@typescript-eslint/no-var-requires': 'off',
|
||||
'@typescript-eslint/prefer-namespace-keyword': 'off',
|
||||
'@typescript-eslint/triple-slash-reference': 'off',
|
||||
'@typescript-eslint/type-annotation-spacing': 'off',
|
||||
'no-var': 'off',
|
||||
'prefer-const': 'off',
|
||||
'prefer-rest-params': 'off',
|
||||
'prefer-spread': 'off',
|
||||
'no-undef': 'error',
|
||||
},
|
||||
};
|
|
@ -0,0 +1,3 @@
|
|||
export * from './justPreset';
|
||||
export * from '@fluentui-react-native/build-tools';
|
||||
export * from './eslintPreset';
|
|
@ -0,0 +1,88 @@
|
|||
// @ts-check
|
||||
|
||||
const { task, series, parallel, condition, option, argv, addResolvePath, prettierCheckTask, prettierTask } = require('just-scripts');
|
||||
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
const { clean } = require('./tasks/clean');
|
||||
const { copy } = require('./tasks/copy');
|
||||
const { jest } = require('./tasks/jest');
|
||||
const { ts } = require('./tasks/ts');
|
||||
const { eslint } = require('./tasks/eslint');
|
||||
const { webpack, webpackDevServer } = require('./tasks/webpack');
|
||||
const { depcheckTask } = require('./tasks/depcheck');
|
||||
const { verifyApiExtractor, updateApiExtractor } = require('./tasks/api-extractor');
|
||||
const checkForModifiedFiles = require('./tasks/check-for-modified-files');
|
||||
|
||||
import { metroTask } from '@fluentui-react-native/build-tools';
|
||||
|
||||
export function preset() {
|
||||
// this add s a resolve path for the build tooling deps like TS from the scripts folder
|
||||
addResolvePath(__dirname);
|
||||
|
||||
option('production');
|
||||
|
||||
// Adds an alias for 'npm-install-mode' for backwards compatibility
|
||||
option('min', { alias: 'npm-install-mode' });
|
||||
|
||||
option('webpackConfig', { alias: 'w' });
|
||||
|
||||
// Build only commonjs (not other TS variants) but still run other tasks
|
||||
option('commonjs');
|
||||
|
||||
// use Metro for bundling task instead of the default webpack
|
||||
option('useMetro');
|
||||
option('dev');
|
||||
option('platform', { string: true });
|
||||
option('bundleName', { string: true });
|
||||
option('server');
|
||||
option('port', { number: true });
|
||||
option('cli');
|
||||
|
||||
// for options that have a check/fix switch this puts them into fix mode
|
||||
option('fix');
|
||||
|
||||
task('clean', clean);
|
||||
task('copy', copy);
|
||||
task('jest', jest);
|
||||
task('ts:commonjs', ts.commonjs);
|
||||
task('ts:esm', ts.esm);
|
||||
task('eslint', eslint);
|
||||
task('ts:commonjs-only', ts.commonjsOnly);
|
||||
task('webpack', webpack);
|
||||
task('webpack-dev-server', webpackDevServer);
|
||||
task('verify-api-extractor', verifyApiExtractor);
|
||||
task('update-api-extractor', updateApiExtractor);
|
||||
task('prettier', () => (argv().fix ? prettierTask : prettierCheckTask));
|
||||
task('check-for-modified-files', checkForModifiedFiles);
|
||||
task('tsall', parallel('ts:commonjs', 'ts:esm'));
|
||||
task('ts', series(condition('ts:commonjs-only', () => !!argv().commonjs), condition('tsall', () => !argv().commonjs)));
|
||||
|
||||
task('validate', parallel('eslint', condition('jest', () => fs.existsSync(path.join(process.cwd(), 'jest.config.js')))));
|
||||
|
||||
task('code-style', series('prettier', 'eslint'));
|
||||
task('update-api', series('clean', 'copy', 'ts', 'update-api-extractor'));
|
||||
task('dev', series('clean', 'copy', 'webpack-dev-server'));
|
||||
|
||||
task('build:node-lib', series('clean', 'copy', series(condition('validate', () => !argv().min), 'ts:commonjs-only')));
|
||||
|
||||
task('metro', () =>
|
||||
metroTask({
|
||||
dev: !!argv().dev,
|
||||
...(argv().cli && { cli: true }),
|
||||
...(argv().platform && { platform: argv().platform }),
|
||||
...(argv().bundleName && { bundleName: argv().bundleName }),
|
||||
...(argv().server && { server: true }),
|
||||
...(argv().server && argv().port && { port: argv().port }),
|
||||
}),
|
||||
);
|
||||
|
||||
task('bundle', series(condition('metro', () => !!argv().useMetro), condition('webpack', () => !argv().useMetro)));
|
||||
|
||||
task('build', series('clean', 'copy', 'ts'));
|
||||
|
||||
task('depcheck', depcheckTask);
|
||||
|
||||
task('no-op', () => {});
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
// @ts-check
|
||||
|
||||
const { runPrettierForProject } = require('../prettier/prettier-helpers');
|
||||
|
||||
module.exports = function() {
|
||||
runPrettierForProject(process.cwd());
|
||||
};
|
|
@ -1,29 +0,0 @@
|
|||
const { getPackageInfo } = require('just-repo-utils');
|
||||
const fs = require('fs');
|
||||
|
||||
function testStuff(strategy) {
|
||||
const options = strategy ? { strategy } : {};
|
||||
return [
|
||||
getPackageInfo(options).names(),
|
||||
getPackageInfo(options).paths(),
|
||||
getPackageInfo(options)
|
||||
.dependencies({ ...options, target: '@uifabricshared/foundation-compose' })
|
||||
.names(),
|
||||
getPackageInfo(options)
|
||||
.dependencies({ ...options, target: '@fluentui-react-native/immutable-merge' })
|
||||
.names(),
|
||||
getPackageInfo(options)
|
||||
.dependencies({ ...options, target: 'foo' })
|
||||
.names()
|
||||
];
|
||||
}
|
||||
|
||||
function testSet(strategy) {
|
||||
console.time('test');
|
||||
const results = testStuff(strategy);
|
||||
console.timeEnd('test');
|
||||
results.forEach(result => console.log(result));
|
||||
}
|
||||
|
||||
testSet('no-cache');
|
||||
testSet();
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"outDir": "./lib",
|
||||
"target": "es2015",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
|
@ -23,5 +24,6 @@
|
|||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"*": ["src/*"]
|
||||
}
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче