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:
Jason Morse 2020-08-19 15:52:37 -07:00 коммит произвёл GitHub
Родитель 3b0afb1c7e
Коммит 580825d7ae
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
25 изменённых файлов: 170 добавлений и 184 удалений

Просмотреть файл

@ -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',
},
};

3
scripts/src/index.ts Normal file
Просмотреть файл

@ -0,0 +1,3 @@
export * from './justPreset';
export * from '@fluentui-react-native/build-tools';
export * from './eslintPreset';

88
scripts/src/justPreset.ts Normal file
Просмотреть файл

@ -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"]
}