diff --git a/cli/bin/seed.js b/cli/bin/seed.js index ea53a24..829f4d0 100755 --- a/cli/bin/seed.js +++ b/cli/bin/seed.js @@ -1,9 +1,5 @@ #!/usr/bin/env node 'use strict'; -const commandLineArgs = require('command-line-args'); -const { optionsDefinition } = require('../dist/options'); -const cli = require('../dist/index'); - -const options = commandLineArgs(optionsDefinition); -cli.run(options); +require('ts-node').register(); +require('../dist/index').run(); diff --git a/cli/package-lock.json b/cli/package-lock.json index 5f67d10..945dac6 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -1,7 +1,38 @@ { - "requires": true, + "name": "mongo-seeding-cli", + "version": "2.2.0", "lockfileVersion": 1, + "requires": true, "dependencies": { + "@types/bson": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-1.0.11.tgz", + "integrity": "sha512-j+UcCWI+FsbI5/FQP/Kj2CXyplWAz39ktHFkXk84h7dNblKRSoNJs95PZFRd96NQGqsPEPgeclqnznWZr14ZDA==", + "requires": { + "@types/node": "*" + } + }, + "@types/command-line-args": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.0.0.tgz", + "integrity": "sha512-4eOPXyn5DmP64MCMF8ePDvdlvlzt2a+F8ZaVjqmh2yFCpGjc1kI3kGnCFYX9SCsGTjQcWIyVZ86IHCEyjy/MNg==", + "dev": true + }, + "@types/events": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" + }, + "@types/mongodb": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.1.7.tgz", + "integrity": "sha512-ljS4mE9o3apEkI59pftdnLf3b1ZczMPtXWp1myrhR+E/CLk0O5SjbTt6Rn3OxMB+Qc2eAytrQVufa4y1pFqE2A==", + "requires": { + "@types/bson": "*", + "@types/events": "*", + "@types/node": "*" + } + }, "@types/node": { "version": "10.9.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.4.tgz", @@ -32,6 +63,21 @@ "typical": "^2.6.1" } }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "bson": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", + "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", @@ -78,16 +124,34 @@ "typical": "^2.6.1" } }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "find-replace": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", @@ -112,11 +176,116 @@ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mongo-seeding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mongo-seeding/-/mongo-seeding-2.2.0.tgz", + "integrity": "sha512-gcVrOeo+EDM+YTbeyGmi3KyhPuHYkspA1iXA3wcIWUS6D9THGVxfzPPxacNruFRKj72j6J95w7IQpEQfoquqDQ==", + "requires": { + "@types/mongodb": "^3.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "mongodb": "^3.1.0" + } + }, + "mongodb": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.4.tgz", + "integrity": "sha512-BGUxo4a/p5KtZpOn6+z6iZXTHfDxKDvibHQap9uMJqQouwoszvTIO/QbVZkaSX3Spny0jtTEeHc0FwfpGbtEzA==", + "requires": { + "mongodb-core": "3.1.3", + "safe-buffer": "^5.1.2" + } + }, + "mongodb-core": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.3.tgz", + "integrity": "sha512-dISiV3zHGJTwZpg0xDhi9zCqFGMhA5kDPByHlcaEp09NSKfzHJ7XQbqVrL7qhki1U9PZHsmRfbFzco+6b1h2wA==", + "requires": { + "bson": "^1.1.0", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "reduce-flatten": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=" }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "saslprep": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.1.tgz", + "integrity": "sha512-ntN6SbE3hRqd45PKKadRPgA+xHPWg5lPSj2JWJdJvjTwXDDfkPVtXWvP8jJojvnm+rAsZ2b299C5NwZqq818EA==", + "optional": true + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -146,6 +315,21 @@ "typical": "^2.6.1" } }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + } + }, "typescript": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.3.tgz", @@ -164,6 +348,11 @@ "reduce-flatten": "^1.0.1", "typical": "^2.6.1" } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" } } } diff --git a/cli/package.json b/cli/package.json index d68dd95..59807ea 100755 --- a/cli/package.json +++ b/cli/package.json @@ -59,9 +59,11 @@ "@types/node": "^10.9.0", "command-line-args": "^5.0.0", "command-line-usage": "^5.0.0", - "mongo-seeding": "^2.2.0" + "mongo-seeding": "^2.2.0", + "ts-node": "^7.0.1", + "typescript": "^3.0.0" }, "devDependencies": { - "typescript": "^3.0.0" + "@types/command-line-args": "^5.0.0" } } diff --git a/cli/src/index.ts b/cli/src/index.ts index 70b132f..5891245 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -3,7 +3,7 @@ process.env.DEBUG = 'mongo-seeding'; import { seedDatabase } from 'mongo-seeding'; import { - convertOptions, + populateOptions, optionsDefinition, shouldShowHelp, CommandLineOptions, @@ -11,13 +11,17 @@ import { } from './options'; import { showHelp } from './help'; -export const run = async (options: CommandLineOptions) => { +import * as commandLineArgs from "command-line-args"; + +export const run = async () => { + const options: CommandLineOptions = commandLineArgs(optionsDefinition) as CommandLineOptions; + if (shouldShowHelp(options)) { showHelp(); return; } - const partialConfig = convertOptions(options); + const partialConfig = populateOptions(options); try { validateOptions(options); await seedDatabase(partialConfig); diff --git a/cli/src/options.ts b/cli/src/options.ts index df39f8e..8726c9f 100644 --- a/cli/src/options.ts +++ b/cli/src/options.ts @@ -120,7 +120,7 @@ const validatePositiveNumber = (variable: number | undefined, name: string) => { } }; -export const convertOptions = ( +export const populateOptions = ( options: CommandLineOptions, ): DeepPartial => ({ database: { @@ -137,4 +137,5 @@ export const convertOptions = ( dropCollection: options['drop-collection'], replaceIdWithUnderscoreId: options['replace-id'], reconnectTimeoutInSeconds: options['reconnect-timeout'], + supportedExtensions: ["js", "json", "ts"] }); diff --git a/samples/example-ts/README.md b/samples/example-ts/README.md new file mode 100644 index 0000000..fdf942b --- /dev/null +++ b/samples/example-ts/README.md @@ -0,0 +1,2 @@ +## WORK IN PROGRESS +For a limited time the samples work only with new, unreleased Mongo Seeding CLI (3.0.0). Currently they break compatibility with current Mongo Seeding Docker Image. Please see examples for [latest stable version](https://github.com/pkosiec/mongo-seeding/tree/v2.2.0/samples). \ No newline at end of file diff --git a/samples/example-ts/data/1-categories/categories.ts b/samples/example-ts/data/1-categories/categories.ts index 4bc854c..c4fbbe0 100644 --- a/samples/example-ts/data/1-categories/categories.ts +++ b/samples/example-ts/data/1-categories/categories.ts @@ -1,9 +1,12 @@ -import { mapToEntities } from "@helpers/index"; +import { mapToEntities } from "../../helpers"; +import { Category } from "../../models"; -const categories = [ +const categoryNames = [ "Uncategorized", "Cats", "Dogs" ]; -export = mapToEntities(categories); +const categories: Category[] = mapToEntities(categoryNames); + +export = categories diff --git a/samples/example-ts/data/2-posts/posts.ts b/samples/example-ts/data/2-posts/posts.ts index c1e2797..20c2683 100644 --- a/samples/example-ts/data/2-posts/posts.ts +++ b/samples/example-ts/data/2-posts/posts.ts @@ -1,5 +1,5 @@ -import { getObjectId } from '@helpers/index'; -import { Post, Comment } from '@models/index'; +import { getObjectId } from "../../helpers"; +import { Post } from "../../models"; const posts: Post[] = [ {