diff --git a/package-lock.json b/package-lock.json index 37b3781..886f876 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2360,7 +2360,11 @@ "version": "file:packages/argparse" }, "@rondo.dev/captcha": { - "version": "file:packages/captcha" + "version": "file:packages/captcha", + "requires": { + "express": "^4.17.1", + "svg-captcha": "^1.4.0" + } }, "@rondo.dev/client": { "version": "file:packages/client", @@ -2409,6 +2413,7 @@ "@rondo.dev/comments-server": { "version": "file:packages/comments-server", "requires": { + "@rondo.dev/comments-client": "0.0.1", "@rondo.dev/comments-common": "0.0.1", "@rondo.dev/common": "0.0.1", "@rondo.dev/config": "0.0.1", @@ -2487,6 +2492,22 @@ "express": "^4.17.1" } }, + "@rondo.dev/react-captcha": { + "version": "file:packages/react-captcha", + "requires": { + "react": "^16.11.0" + } + }, + "@rondo.dev/react-test": { + "version": "file:packages/react-test", + "requires": { + "@rondo.dev/redux": "0.0.1", + "react": "^16.11.0", + "react-dom": "^16.11.0", + "react-redux": "^7.1.1", + "redux": "^4.0.4" + } + }, "@rondo.dev/redux": { "version": "file:packages/redux", "requires": { @@ -12446,7 +12467,6 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-0.7.3.tgz", "integrity": "sha1-QPuM4Yv9YOdESO/f5EKDQJg5eqs=", - "dev": true, "requires": { "tiny-inflate": "^1.0.2" } @@ -15336,7 +15356,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/svg-captcha/-/svg-captcha-1.4.0.tgz", "integrity": "sha512-/fkkhavXPE57zRRCjNqAP3txRCSncpMx3NnNZL7iEoyAtYwUjPhJxW6FQTQPG5UPEmCrbFoXS10C3YdJlW7PDg==", - "dev": true, "requires": { "opentype.js": "^0.7.3" } @@ -15643,8 +15662,7 @@ "tiny-inflate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", - "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=", - "dev": true + "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" }, "tiny-invariant": { "version": "1.0.6", diff --git a/package.json b/package.json index e555724..b239569 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "@rondo.dev/db-typeorm": "file:packages/db-typeorm", "@rondo.dev/middleware": "file:packages/middleware", "@rondo.dev/captcha": "file:packages/captcha", - "@rondo.dev/react-captcha": "file:packages/react-captcha" + "@rondo.dev/react-captcha": "file:packages/react-captcha", + "@rondo.dev/react-test": "file:packages/react-test" }, "devDependencies": { "@types/bcrypt": "^3.0.0", @@ -128,4 +129,4 @@ "watchify": "^3.11.1" }, "name": "node" -} \ No newline at end of file +} diff --git a/packages/captcha/package.json b/packages/captcha/package.json index 90dfdaf..5d1be42 100644 --- a/packages/captcha/package.json +++ b/packages/captcha/package.json @@ -8,8 +8,17 @@ "compile": "tsc", "clean": "rm -rf lib/" }, - "dependencies": {}, + "dependencies": { + "express": "^4.17.1", + "svg-captcha": "^1.4.0" + }, "main": "lib/index.js", "module": "esm/index.js", - "types": "lib/index.d.ts" + "types": "lib/index.d.ts", + "devDependencies": { + "@rondo.dev/test-utils": "0.0.1", + "cookie-parser": "^1.4.4", + "express-session": "^1.17.0", + "supertest": "^4.0.2" + } } \ No newline at end of file diff --git a/packages/captcha/tsconfig.json b/packages/captcha/tsconfig.json index 703c5c1..5ac74d1 100644 --- a/packages/captcha/tsconfig.json +++ b/packages/captcha/tsconfig.json @@ -9,4 +9,4 @@ "path": "../test-utils" } ] -} +} \ No newline at end of file diff --git a/packages/client/package.json b/packages/client/package.json index 00a791d..74d3d32 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -17,6 +17,7 @@ "@rondo.dev/http-client": "0.0.1", "@rondo.dev/http-types": "0.0.1", "@rondo.dev/jsonrpc": "0.0.1", + "@rondo.dev/react-test": "0.0.1", "@rondo.dev/redux": "0.0.1", "bloomer": "^0.6.5", "history": "^4.10.1", diff --git a/packages/client/src/test-utils/index.ts b/packages/client/src/test-utils/index.ts index fd83141..ca6dbda 100644 --- a/packages/client/src/test-utils/index.ts +++ b/packages/client/src/test-utils/index.ts @@ -1 +1 @@ -export * from './TestUtils' +export * from '@rondo.dev/react-test' diff --git a/packages/client/tsconfig.json b/packages/client/tsconfig.json index 7d46711..44201d9 100644 --- a/packages/client/tsconfig.json +++ b/packages/client/tsconfig.json @@ -17,6 +17,9 @@ { "path": "../jsonrpc" }, + { + "path": "../react-test" + }, { "path": "../redux" }, diff --git a/packages/react-captcha/package.json b/packages/react-captcha/package.json index 76e9320..c89eb8b 100644 --- a/packages/react-captcha/package.json +++ b/packages/react-captcha/package.json @@ -8,8 +8,11 @@ "compile": "tsc", "clean": "rm -rf lib/" }, - "dependencies": {}, + "dependencies": { + "react": "^16.11.0" + }, "main": "lib/index.js", "module": "esm/index.js", - "types": "lib/index.d.ts" + "types": "lib/index.d.ts", + "devDependencies": {} } \ No newline at end of file diff --git a/packages/react-captcha/src/Captcha.test.tsx b/packages/react-captcha/src/Captcha.test.tsx new file mode 100644 index 0000000..e69de29 diff --git a/packages/react-captcha/src/Captcha.tsx b/packages/react-captcha/src/Captcha.tsx index 0d0703b..a8bb6c8 100644 --- a/packages/react-captcha/src/Captcha.tsx +++ b/packages/react-captcha/src/Captcha.tsx @@ -59,8 +59,7 @@ export class Captcha extends React.PureComponent { )} - k - + ) } diff --git a/packages/react-captcha/src/index.ts b/packages/react-captcha/src/index.ts index e69de29..916826c 100644 --- a/packages/react-captcha/src/index.ts +++ b/packages/react-captcha/src/index.ts @@ -0,0 +1 @@ +export * from './Captcha' diff --git a/packages/react-captcha/tsconfig.json b/packages/react-captcha/tsconfig.json index 94e864b..94bb254 100644 --- a/packages/react-captcha/tsconfig.json +++ b/packages/react-captcha/tsconfig.json @@ -4,6 +4,5 @@ "outDir": "lib", "rootDir": "src" }, - "references": [ - ] -} + "references": [] +} \ No newline at end of file diff --git a/packages/react-test/jest.config.js b/packages/react-test/jest.config.js new file mode 100644 index 0000000..4c0cf86 --- /dev/null +++ b/packages/react-test/jest.config.js @@ -0,0 +1,16 @@ +module.exports = { + roots: [ + '/src', + ], + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, + testRegex: '(/__tests__/.*|\\.(test|spec))\\.tsx?$', + moduleFileExtensions: [ + 'ts', + 'tsx', + 'js', + 'jsx', + ], + setupFiles: ['/jest.setup.js'], +} diff --git a/packages/react-test/jest.setup.js b/packages/react-test/jest.setup.js new file mode 100644 index 0000000..a952c9b --- /dev/null +++ b/packages/react-test/jest.setup.js @@ -0,0 +1,4 @@ +if (!process.env.LOG) { + process.env.LOG = 'sql:warn' +} +process.chdir(__dirname) diff --git a/packages/react-test/package.json b/packages/react-test/package.json new file mode 100644 index 0000000..baeffe4 --- /dev/null +++ b/packages/react-test/package.json @@ -0,0 +1,22 @@ +{ + "name": "@rondo.dev/react-test", + "version": "0.0.1", + "private": true, + "scripts": { + "test": "jest", + "lint": "tslint --project .", + "compile": "tsc", + "clean": "rm -rf lib/" + }, + "dependencies": { + "@rondo.dev/redux": "0.0.1", + "react": "^16.11.0", + "react-dom": "^16.11.0", + "react-redux": "^7.1.1", + "redux": "^4.0.4" + }, + "main": "lib/index.js", + "module": "esm/index.js", + "types": "lib/index.d.ts", + "devDependencies": {} +} \ No newline at end of file diff --git a/packages/client/src/test-utils/TestUtils.tsx b/packages/react-test/src/index.tsx similarity index 100% rename from packages/client/src/test-utils/TestUtils.tsx rename to packages/react-test/src/index.tsx diff --git a/packages/react-test/tsconfig.esm.json b/packages/react-test/tsconfig.esm.json new file mode 100644 index 0000000..6e2aaa7 --- /dev/null +++ b/packages/react-test/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "esm" + }, + "references": [ + ] +} diff --git a/packages/react-test/tsconfig.json b/packages/react-test/tsconfig.json new file mode 100644 index 0000000..51ee0a4 --- /dev/null +++ b/packages/react-test/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.common.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src" + }, + "references": [ + { + "path": "../redux" + } + ] +} \ No newline at end of file diff --git a/packages/scripts/src/scripts/imports.ts b/packages/scripts/src/scripts/imports.ts index 074c9d0..c8fcc60 100644 --- a/packages/scripts/src/scripts/imports.ts +++ b/packages/scripts/src/scripts/imports.ts @@ -35,6 +35,7 @@ function writeJSON(filename: string, object: T) { export function imports(...argv: string[]) { const args = argparse({ packagesDir: arg('string', {default: 'packages/', positional: true}), + 'package': arg('string'), root: arg('string', {default: './package.json'}), dryRun: arg('boolean'), testFileRegex: arg('string', {default: '\\.test\\.(t|j)sx?$'}), @@ -95,14 +96,24 @@ export function imports(...argv: string[]) { return !moduleName.startsWith('.') } + function getModule(sourceFile: ts.SourceFile, node: ts.Node) { + if (ts.isImportDeclaration(node)) { + return node.moduleSpecifier.getText(sourceFile) + } + if (ts.isExportDeclaration(node) && node.moduleSpecifier) { + return node.moduleSpecifier.getText(sourceFile) + } + } + /** * Visit nodes finding exported classes */ function visit(sourceFile: ts.SourceFile, node: ts.Node) { - if (ts.isImportDeclaration(node)) { - const text = node.moduleSpecifier.getText(sourceFile) - const name = text.substring(1, text.length - 1) + const moduleWithQuotes = getModule(sourceFile, node) + if (moduleWithQuotes) { + const name = moduleWithQuotes.substring(1, moduleWithQuotes.length - 1) if (isInstalledModule(name)) { + debug(' %s', name) let resolved: string try { resolved = require.resolve(name) @@ -127,6 +138,7 @@ export function imports(...argv: string[]) { for (const sourceFile of program.getSourceFiles()) { if (!sourceFile.isDeclarationFile) { + debug(relative(projectDir, sourceFile.fileName)) ts.forEachChild(sourceFile, visit.bind(null, sourceFile)) } } @@ -240,6 +252,8 @@ export function imports(...argv: string[]) { .filter(absoluteDep => absoluteDep.startsWith(absolutePackagesDir)) .map(findPackageRoot) .map(pkgRoot => relative(projectDir, pkgRoot)) + // filter out packages in local node_modules + .filter(path => !path.startsWith('node_modules')) .map(path => ({ path })) debug('references: %o', tsConfig.references) @@ -247,7 +261,11 @@ export function imports(...argv: string[]) { return {filename, json: tsConfig} } - const result = getFolders(args.packagesDir) + const folders = args.package + ? [join(args.packagesDir, args.package)] + : getFolders(args.packagesDir) + + const result = folders .map(pkgDir => { error('Entering: %s', pkgDir) const tsConfigFileName = 'tsconfig.json' diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index 441dc53..e69f746 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -14,6 +14,9 @@ { "path": "../common" }, + { + "path": "../common" + }, { "path": "../config" }, @@ -42,4 +45,4 @@ "path": "../validator" } ] -} +} \ No newline at end of file