Skip to content
Open

Mssql #258

Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
e156668
Add splitter
peterdee Mar 13, 2019
6d12973
Add file creation
peterdee Mar 14, 2019
96e74a7
Formatter: default API responses
peterdee Mar 14, 2019
774e7c5
Default API responses
peterdee Mar 15, 2019
d4cbe15
Classes, x-AuthFieldType
peterdee Mar 18, 2019
70d1c35
Update x-AuthFieldType check in controllers, update templates
peterdee Mar 19, 2019
01bebda
Load definitions to the global scope
peterdee Mar 19, 2019
bf59213
Definitions files generation
peterdee Mar 19, 2019
71c0b15
x-AuthFieldType parameter validation fix
peterdee Mar 20, 2019
f10b02b
Bindings inside of the controllers, global availability
peterdee Mar 20, 2019
af80550
Load objects and classes to the global scope
peterdee Mar 21, 2019
a5ed911
Bind definition classes inside of the controllers
peterdee Mar 21, 2019
2f7b5d9
Fix duplicating definitions
peterdee Mar 21, 2019
05c5386
Fix x-AuthFieldType inside of the definitions classes
peterdee Mar 21, 2019
0b30b93
Default response values for controllers
peterdee Mar 22, 2019
72001af
FieldValidator fixes
peterdee Mar 22, 2019
a6775db
Remove 'require-from-string'
peterdee Mar 22, 2019
cd2262b
Fix definitions classes export to global
peterdee Mar 22, 2019
ff01b38
Fix definitions classes call inside of the controllers
peterdee Mar 22, 2019
6effc4c
Formatting
peterdee Mar 25, 2019
9482fc0
Remove class names from controllers
peterdee Mar 25, 2019
1e45537
Remove class names from controllers
peterdee Mar 25, 2019
140339c
Method template update
peterdee Mar 25, 2019
057b95c
Update templates, fix controller parameters binding
peterdee Mar 26, 2019
4b7d7d2
Fix definitions classes instantination
peterdee Mar 26, 2019
d769ab7
Fix definition binding name
peterdee Mar 26, 2019
0370a29
Fix definitions bindings: nested objects
peterdee Mar 26, 2019
5e478dc
Fix props names for definitions
peterdee Mar 26, 2019
60b67f3
Fix x-AuthFieldType check for definitions
peterdee Mar 27, 2019
f9cdc53
Fix array binding for definitions
peterdee Mar 27, 2019
e5e2aac
Definitions formatting
peterdee Mar 27, 2019
8041aa8
Definitions formatting
peterdee Mar 27, 2019
5ac8dea
Fix default API responses (arrays of objects)
peterdee Mar 27, 2019
7adbb0c
Merge pull request #1 from voicenter/feature/OFC-3
voicenter Mar 27, 2019
8f5fcd2
Fix x-AuthFieldType validation
peterdee Mar 28, 2019
80f25ad
Fix definitions nesting
peterdee Mar 29, 2019
a3c0d5a
Add options checks, update package.json, update README
peterdee Apr 1, 2019
d6706d7
Fix default directories for the generated files, update README
peterdee Apr 1, 2019
c885b75
Merge pull request #2 from voicenter/feature/OFC-3
peterdee Apr 1, 2019
d4269a4
Simple queries generation
peterdee Apr 2, 2019
92679a2
Merge pull request #3 from voicenter/feature/OFC-3
peterdee Apr 2, 2019
d7b789a
Generate all queries
peterdee Apr 2, 2019
2cfcb38
Merge pull request #4 from voicenter/feature/OFC-3
peterdee Apr 2, 2019
58b6ee0
Multi-method template update
peterdee Apr 2, 2019
7dedbba
Merge pull request #5 from voicenter/feature/OFC-3
peterdee Apr 2, 2019
75f0347
Fix typo
peterdee Apr 4, 2019
69cf41e
Merge pull request #6 from voicenter/feature/OFC-3
peterdee Apr 4, 2019
23e5089
Add dal import, use try/catch in methods
peterdee Apr 9, 2019
1891213
Merge pull request #7 from voicenter/feature/OFC-3
peterdee Apr 9, 2019
9fe725b
AMQP: successfull response
peterdee Apr 17, 2019
14f0c7e
Add error responses to the controllers
peterdee Apr 18, 2019
5d2b5b8
Node version ^
peterdee Apr 18, 2019
08c0dbf
Pass error to the response function
peterdee Apr 18, 2019
26ad4ec
Merge pull request #8 from voicenter/feature/amqp
voicenter Apr 22, 2019
d9557d3
added alias to fn querier.
TzachiSh Apr 24, 2019
4362bfc
added specialKeys
TzachiSh Jun 6, 2019
75cc42a
generate bug fix
Oct 29, 2019
0ad9f12
generate bug fix 2
Oct 29, 2019
9945584
generate bug fix 3
Nov 7, 2019
2e3e131
Add type to validate function
voicenter Jul 23, 2020
a0243a6
Update expose.js
Bohdan2000 Jul 31, 2020
cd821ee
Merge pull request #9 from Bohdan2000/patch-2
voicenter Jul 31, 2020
6c049d5
use validators list instead of one validation
dmitrysam88 Apr 8, 2021
8527cc0
Merge pull request #10 from dmitrysam88/use-validators-list
voicenter Apr 8, 2021
7c5dfdf
Update multi-method.mustache
ViktoryaSVA Jun 2, 2021
93f13cb
Update multi-method.mustache
ViktoryaSVA Jun 2, 2021
312b031
Update multi-method.mustache
ViktoryaSVA Jun 2, 2021
cc89650
Merge pull request #11 from ViktoryaSVA/patch-2
voicenter Jun 2, 2021
5b2dc6b
first push mssql
May 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add file creation
  • Loading branch information
peterdee committed Mar 14, 2019
commit 6d129739dd3c4d0dbc50721a3a8ace782bb48d43
1 change: 1 addition & 0 deletions .jshintignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
lib/splitter.js
zz/
40 changes: 15 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,33 +80,23 @@ In addition to the common options listed below, `getCustomCode()` *requires* a `
description: swagger object
```

If it is required to generate multiple files for Node (i. e. multiple methods based on the initial JSON) provide the following option:
If it is required to generate multiple files for Node (i. e. multiple methods based on the initial JSON) provide the following options:

multiple: true

When this option is provided, the module will return an array of objects, that have the following structure:

{ content: <STRING>,
file: <STRING>,
functions: <ARRAY>,
directory: <STRING>,
isWrapper: <BOOLEAN> }

This structure describes a file, that contains generated REST APIs

`content` - file contents, single string

`file` - file name

`functions` - array of function names

`directory` - name of the directory, that should be created for this file

`isWrapper` - will be **true** for wrapper file

Resulting array should always contain a single wrapper file
multiple:
type: boolean
description: this option enables file splitting
path:
type: string
description: this option should contain the path to the project directory (__dirname)
example: '/Users/name/Projects/someProject/'
dir:
type: string
description: this option should contain the name of the directory with APIs
example: 'newAPIs'

If `multiple` option is provided, `path` and `dir` options **are required**

**Please notice**: when using this option, the module returns a **promise**
The `dir` folder will be created and generated files will be placed inside of it

### Template Variables
The following data are passed to the [mustache templates](https://github.com/janl/mustache.js):
Expand Down
9 changes: 8 additions & 1 deletion lib/codegen.js
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,13 @@ var getViewForSwagger1 = function(opts, type){
* @returns {*}
*/
var getCode = function(opts, type) {
// check 'multiple' & all of the required parameters
if (opts.multiple) {
if (!(opts.dir && opts.path)) {
throw new Error('Missing some of the required parameters!');
}
}

// For Swagger Specification version 2.0 value of field 'swagger' must be a string '2.0'
var data = opts.swagger.swagger === '2.0' ? getViewForSwagger2(opts, type) : getViewForSwagger1(opts, type);

Expand Down Expand Up @@ -328,7 +335,7 @@ var getCode = function(opts, type) {
});
}
if (opts.multiple) {
return splitter.split(source, opts.className);
return splitter.split(source, opts.className, opts.path, opts.dir);
}
if (opts.beautify === undefined || opts.beautify === true) {
return beautify(source, { indent_size: 4, max_preserve_newlines: 2 });
Expand Down
70 changes: 44 additions & 26 deletions lib/splitter.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,15 @@ function capitalize(string) {
* Split the code to create multiple files and directories
* @param {string} source - source code generated by swagger-js-codegen (using special templates!)
* @param {string} className - specified class name
* @param {string} path - path to the project directory, that calls the code generator (__dirname)
* @param {string} dir - name of the container directory
* @returns {array} - array of objects (files and wrapper)
*/
async function split(source, className) {
async function split(source, className, path, dir) {
// check if everything we need is there
if (!(source && className && path && dir)) {
throw new Error('Missing some of the required parameters!');
}
try {
// convert ES5 to ES6
const { code, warnings } = transform(source, ['let', 'arrow', 'arrow-return', 'class']);
Expand All @@ -27,17 +33,15 @@ async function split(source, className) {
console.log('> codegen-splitter @ ES6 conversion warnings:\n', warnings);
}

// create the source file TODO: better understanding of the file placement
// create the source file
fs.writeFileSync(`${__dirname}/source.js`, code, (err) => {
if (err) {
throw new Error(err);
throw new Error(err.message);
}
});

// load source file and get all of the available methods from the class
console.log('> various', `${__dirname}/source.js`, `${capitalize(className.toLowerCase())}`);
const Instance = require(`${__dirname}/source.js`)[`${capitalize(className.toLowerCase())}`];
console.log('> ins', Instance);
const methods = Object.getOwnPropertyNames(Instance.prototype).filter(m => m !== 'constructor');

// abort everything if there are no methods (i. e. incorrect JSON or something went wrong)
Expand Down Expand Up @@ -104,39 +108,53 @@ async function split(source, className) {
};`, { indent_size: 2 });
});

// delete the source file TODO: better understanding of the file placement
// delete the source file
await fs.unlink(`${__dirname}/source.js`, (err) => {
if (err) {
throw new Error(err);
throw new Error(err.message);
}
});

// make sure container directory exists
const container = `${path}/${dir}`;
if (!fs.existsSync(container)) {
await fs.mkdirSync(container);
}

// create API directories and files
files.forEach((file) => {
// make sure API directory exists
if (!fs.existsSync(`${container}/${file.file}`)) {
fs.mkdirSync(`${container}/${file.file}`);
}
// create file
fs.writeFileSync(`${container}/${file.file}/${file.file}.controller.js`,
beautify(file.content, { indent_size: 2 }),
(fErr) => {
if (fErr) {
throw new Error(fErr.message);
}
});
});

// create API wrapper TODO: what should be inside of the wrapper? What to export?
let wrapperContent = '';
let wrapper = '';
files.forEach((file) => {
const name = file.file;
wrapperContent = `${wrapperContent}
wrapper = `${wrapper}
const ${name} = require('./${name}/${name}.controller.js');`;
});
const wrapper = {
content: beautify(wrapperContent, { indent_size: 2 }),
directory: null,
file: 'index.js', // TODO: wrapper name?
isWrapper: true,
};

// finalize and return
files.forEach((file, i) => {
files[i].directory = file.file;
files[i].file = `${file.file}.controller.js`;
files[i].isWrapper = false;
});
files.push(wrapper);
fs.writeFileSync(`${container}/index.js`,
beautify(wrapper, { indent_size: 2 }),
(wErr) => {
if (wErr) {
throw new Error(wErr.message);
}
});

return files;
return console.log('> swagger-js-codegen @ Success!');
} catch (err) {
console.log('> err', err);
throw new Error(err);
throw new Error(err.message);
}
}

Expand Down