@smartive/graphql-magic 7.0.1 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -3
- package/README.md +8 -15
- package/dist/bin/gqm.cjs +1812 -0
- package/dist/cjs/index.cjs +568 -30
- package/dist/esm/bin/gqm.d.ts +2 -0
- package/dist/esm/bin/gqm.js +121 -0
- package/dist/esm/bin/gqm.js.map +1 -0
- package/dist/esm/client/mutations.d.ts +2 -2
- package/dist/esm/client/mutations.js +2 -1
- package/dist/esm/client/mutations.js.map +1 -1
- package/dist/esm/db/generate.js +7 -7
- package/dist/esm/db/generate.js.map +1 -1
- package/dist/esm/gqm/codegen.d.ts +2 -0
- package/dist/esm/gqm/codegen.js +46 -0
- package/dist/esm/gqm/codegen.js.map +1 -0
- package/dist/esm/gqm/index.d.ts +9 -0
- package/dist/esm/gqm/index.js +11 -0
- package/dist/esm/gqm/index.js.map +1 -0
- package/dist/esm/gqm/parse-knexfile.d.ts +2 -0
- package/dist/esm/gqm/parse-knexfile.js +19 -0
- package/dist/esm/gqm/parse-knexfile.js.map +1 -0
- package/dist/esm/gqm/parse-models.d.ts +2 -0
- package/dist/esm/gqm/parse-models.js +19 -0
- package/dist/esm/gqm/parse-models.js.map +1 -0
- package/dist/esm/gqm/readline.d.ts +1 -0
- package/dist/esm/gqm/readline.js +14 -0
- package/dist/esm/gqm/readline.js.map +1 -0
- package/dist/esm/gqm/settings.d.ts +9 -0
- package/dist/esm/gqm/settings.js +98 -0
- package/dist/esm/gqm/settings.js.map +1 -0
- package/dist/esm/gqm/static-eval.d.ts +3 -0
- package/dist/esm/gqm/static-eval.js +188 -0
- package/dist/esm/gqm/static-eval.js.map +1 -0
- package/dist/esm/gqm/templates.d.ts +4 -0
- package/dist/esm/gqm/templates.js +62 -0
- package/dist/esm/gqm/templates.js.map +1 -0
- package/dist/esm/gqm/utils.d.ts +2 -0
- package/dist/esm/gqm/utils.js +22 -0
- package/dist/esm/gqm/utils.js.map +1 -0
- package/dist/esm/gqm/visitor.d.ts +8 -0
- package/dist/esm/gqm/visitor.js +15 -0
- package/dist/esm/gqm/visitor.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/migrations/generate.d.ts +1 -0
- package/dist/esm/migrations/generate.js +16 -5
- package/dist/esm/migrations/generate.js.map +1 -1
- package/dist/esm/models/models.d.ts +16 -10
- package/dist/esm/models/utils.d.ts +17 -9
- package/dist/esm/models/utils.js +6 -5
- package/dist/esm/models/utils.js.map +1 -1
- package/dist/esm/resolvers/node.js +2 -2
- package/dist/esm/resolvers/node.js.map +1 -1
- package/dist/esm/resolvers/resolver.js +1 -1
- package/dist/esm/resolvers/resolver.js.map +1 -1
- package/dist/esm/schema/generate.js +16 -4
- package/dist/esm/schema/generate.js.map +1 -1
- package/package.json +18 -5
- package/src/bin/gqm.ts +146 -0
- package/src/client/mutations.ts +4 -3
- package/src/db/generate.ts +7 -7
- package/src/gqm/codegen.ts +47 -0
- package/src/gqm/index.ts +11 -0
- package/src/gqm/parse-knexfile.ts +21 -0
- package/src/gqm/parse-models.ts +24 -0
- package/src/gqm/readline.ts +15 -0
- package/src/gqm/settings.ts +112 -0
- package/src/gqm/static-eval.ts +203 -0
- package/src/gqm/templates.ts +64 -0
- package/src/gqm/utils.ts +23 -0
- package/src/gqm/visitor.ts +29 -0
- package/src/index.ts +1 -0
- package/src/migrations/generate.ts +18 -5
- package/src/models/models.ts +12 -7
- package/src/models/utils.ts +11 -8
- package/src/resolvers/node.ts +2 -2
- package/src/resolvers/resolver.ts +1 -1
- package/src/schema/generate.ts +17 -4
- package/tests/utils/generate-migration.ts +2 -13
- package/tests/utils/models.ts +4 -4
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { program } from 'commander';
|
|
3
|
+
import { config } from 'dotenv';
|
|
4
|
+
import knex from 'knex';
|
|
5
|
+
import { simpleGit } from 'simple-git';
|
|
6
|
+
import { MigrationGenerator, generateDBModels, generateKnexTables, generateMutations, getMigrationDate, printSchemaFromModels, } from '..';
|
|
7
|
+
import { generateGraphqlApiTypes, generateGraphqlClientTypes } from '../gqm/codegen';
|
|
8
|
+
import { KNEXFILE_PATH, parseKnexfile } from '../gqm/parse-knexfile';
|
|
9
|
+
import { parseModels } from '../gqm/parse-models';
|
|
10
|
+
import { readLine } from '../gqm/readline';
|
|
11
|
+
import { ensureFileExists, getSetting, getSettings, writeToFile } from '../gqm/settings';
|
|
12
|
+
import { KNEXFILE } from '../gqm/templates';
|
|
13
|
+
config({
|
|
14
|
+
path: '.env',
|
|
15
|
+
});
|
|
16
|
+
config({
|
|
17
|
+
path: '.env.local',
|
|
18
|
+
});
|
|
19
|
+
program.description('The graphql-magic cli.');
|
|
20
|
+
program
|
|
21
|
+
.command('setup')
|
|
22
|
+
.description('Set up the project')
|
|
23
|
+
.action(async () => {
|
|
24
|
+
await getSettings();
|
|
25
|
+
ensureFileExists(KNEXFILE_PATH, KNEXFILE);
|
|
26
|
+
});
|
|
27
|
+
program
|
|
28
|
+
.command('generate')
|
|
29
|
+
.description('Generate all the things')
|
|
30
|
+
.action(async () => {
|
|
31
|
+
const rawModels = await parseModels();
|
|
32
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
33
|
+
writeToFile(`${generatedFolderPath}/schema.graphql`, printSchemaFromModels(rawModels));
|
|
34
|
+
writeToFile(`${generatedFolderPath}/client/mutations.ts`, generateMutations(rawModels));
|
|
35
|
+
writeToFile(`${generatedFolderPath}/db/index.ts`, generateDBModels(rawModels));
|
|
36
|
+
writeToFile(`${generatedFolderPath}/db/knex.ts`, generateKnexTables(rawModels));
|
|
37
|
+
await generateGraphqlApiTypes();
|
|
38
|
+
await generateGraphqlClientTypes();
|
|
39
|
+
});
|
|
40
|
+
program
|
|
41
|
+
.command('generate-models')
|
|
42
|
+
.description('Generate models.json')
|
|
43
|
+
.action(async () => {
|
|
44
|
+
const rawModels = await parseModels();
|
|
45
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
46
|
+
writeToFile(`${generatedFolderPath}/models.json`, JSON.stringify(rawModels, null, 2));
|
|
47
|
+
});
|
|
48
|
+
program
|
|
49
|
+
.command('generate-schema')
|
|
50
|
+
.description('Generate schema')
|
|
51
|
+
.action(async () => {
|
|
52
|
+
const rawModels = await parseModels();
|
|
53
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
54
|
+
writeToFile(`${generatedFolderPath}/schema.graphql`, printSchemaFromModels(rawModels));
|
|
55
|
+
});
|
|
56
|
+
program
|
|
57
|
+
.command('generate-mutation-queries')
|
|
58
|
+
.description('Generate mutation-queries')
|
|
59
|
+
.action(async () => {
|
|
60
|
+
const rawModels = await parseModels();
|
|
61
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
62
|
+
writeToFile(`${generatedFolderPath}/client/mutations.ts`, generateMutations(rawModels));
|
|
63
|
+
});
|
|
64
|
+
program
|
|
65
|
+
.command('generate-db-types')
|
|
66
|
+
.description('Generate DB types')
|
|
67
|
+
.action(async () => {
|
|
68
|
+
const rawModels = await parseModels();
|
|
69
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
70
|
+
writeToFile(`${generatedFolderPath}/db/index.ts`, generateMutations(rawModels));
|
|
71
|
+
});
|
|
72
|
+
program
|
|
73
|
+
.command('generate-knex-types')
|
|
74
|
+
.description('Generate Knex types')
|
|
75
|
+
.action(async () => {
|
|
76
|
+
const rawModels = await parseModels();
|
|
77
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
78
|
+
writeToFile(`${generatedFolderPath}/db/knex.ts`, generateKnexTables(rawModels));
|
|
79
|
+
});
|
|
80
|
+
program
|
|
81
|
+
.command('generate-graphql-api-types')
|
|
82
|
+
.description('Generate Graphql API types')
|
|
83
|
+
.action(async () => {
|
|
84
|
+
await generateGraphqlApiTypes();
|
|
85
|
+
});
|
|
86
|
+
program
|
|
87
|
+
.command('generate-graphql-client-types')
|
|
88
|
+
.description('Generate Graphql client types')
|
|
89
|
+
.action(async () => {
|
|
90
|
+
await generateGraphqlClientTypes();
|
|
91
|
+
});
|
|
92
|
+
program
|
|
93
|
+
.command('generate-migration')
|
|
94
|
+
.description('Generate Migration')
|
|
95
|
+
.action(async () => {
|
|
96
|
+
const git = simpleGit();
|
|
97
|
+
let name = process.argv[2] || (await git.branch()).current.split('/').pop();
|
|
98
|
+
if (name && ['staging', 'production'].includes(name)) {
|
|
99
|
+
name = await readLine('Migration name:');
|
|
100
|
+
}
|
|
101
|
+
const knexfile = await parseKnexfile();
|
|
102
|
+
const db = knex(knexfile);
|
|
103
|
+
try {
|
|
104
|
+
const rawModels = await parseModels();
|
|
105
|
+
const migrations = await new MigrationGenerator(db, rawModels).generate();
|
|
106
|
+
writeToFile(`migrations/${getMigrationDate()}_${name}.ts`, migrations);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
await db.destroy();
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
program
|
|
113
|
+
.command('*', { noHelp: true })
|
|
114
|
+
.description('Invalid command')
|
|
115
|
+
.action(() => {
|
|
116
|
+
console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' '));
|
|
117
|
+
process.exit(1);
|
|
118
|
+
});
|
|
119
|
+
// Parse the arguments
|
|
120
|
+
program.parse(process.argv);
|
|
121
|
+
//# sourceMappingURL=gqm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gqm.js","sourceRoot":"","sources":["../../../src/bin/gqm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const generateMutations: (models:
|
|
1
|
+
import { RawModels } from '../models/models';
|
|
2
|
+
export declare const generateMutations: (models: RawModels) => string;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import upperCase from 'lodash/upperCase';
|
|
2
|
+
import { isEntityModel } from '..';
|
|
2
3
|
const constantCase = (str) => upperCase(str).replace(/ /g, '_');
|
|
3
4
|
export const generateMutations = (models) => {
|
|
4
5
|
const parts = [];
|
|
5
|
-
for (const { name, creatable, updatable, deletable } of models) {
|
|
6
|
+
for (const { name, creatable, updatable, deletable } of models.filter(isEntityModel)) {
|
|
6
7
|
if (creatable) {
|
|
7
8
|
parts.push(`export const CREATE_${constantCase(name)} = gql\`\n mutation Create${name}Mutation($data: Create${name}!) {\n create${name}(data: $data) { id }\n }\n\`;`);
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../../src/client/mutations.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../../src/client/mutations.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGnC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAiB,EAAE,EAAE;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;QACpF,IAAI,SAAS,EAAE;YACb,KAAK,CAAC,IAAI,CACR,uBAAuB,YAAY,CACjC,IAAI,CACL,8BAA8B,IAAI,yBAAyB,IAAI,mBAAmB,IAAI,gCAAgC,CACxH,CAAC;SACH;QAED,IAAI,SAAS,EAAE;YACb,KAAK,CAAC,IAAI,CACR,uBAAuB,YAAY,CACjC,IAAI,CACL,8BAA8B,IAAI,mCAAmC,IAAI,mBAAmB,IAAI,oDAAoD,CACtJ,CAAC;SACH;QAED,IAAI,SAAS,EAAE;YACb,KAAK,CAAC,IAAI,CACR,uBAAuB,YAAY,CACjC,IAAI,CACL,8BAA8B,IAAI,mCAAmC,IAAI,gCAAgC,CAC3G,CAAC;SACH;KACF;IAED,OAAO,qDAAqD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACnF,CAAC,CAAC"}
|
package/dist/esm/db/generate.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import CodeBlockWriter from 'code-block-writer';
|
|
2
|
-
import { get, getModels,
|
|
2
|
+
import { get, getModels, isCustomField, isEnumModel, not } from '..';
|
|
3
3
|
const PRIMITIVE_TYPES = {
|
|
4
4
|
ID: 'string',
|
|
5
5
|
Boolean: 'boolean',
|
|
@@ -28,7 +28,7 @@ export const generateDBModels = (rawModels) => {
|
|
|
28
28
|
writer
|
|
29
29
|
.write(`export type ${model.name} = `)
|
|
30
30
|
.inlineBlock(() => {
|
|
31
|
-
for (const field of fields.filter(not(
|
|
31
|
+
for (const field of fields.filter(not(isCustomField))) {
|
|
32
32
|
writer.write(`'${getFieldName(field)}': ${getFieldType(field)}${field.nonNull ? '' : ' | null'},`).newLine();
|
|
33
33
|
}
|
|
34
34
|
})
|
|
@@ -36,7 +36,7 @@ export const generateDBModels = (rawModels) => {
|
|
|
36
36
|
writer
|
|
37
37
|
.write(`export type ${model.name}Initializer = `)
|
|
38
38
|
.inlineBlock(() => {
|
|
39
|
-
for (const field of fields.filter(not(
|
|
39
|
+
for (const field of fields.filter(not(isCustomField))) {
|
|
40
40
|
writer
|
|
41
41
|
.write(`'${getFieldName(field)}'${field.nonNull && field.defaultValue === undefined ? '' : '?'}: ${getFieldType(field)}${field.list ? ' | string' : ''}${field.nonNull ? '' : ' | null'},`)
|
|
42
42
|
.newLine();
|
|
@@ -46,7 +46,7 @@ export const generateDBModels = (rawModels) => {
|
|
|
46
46
|
writer
|
|
47
47
|
.write(`export type ${model.name}Mutator = `)
|
|
48
48
|
.inlineBlock(() => {
|
|
49
|
-
for (const field of fields.filter(not(
|
|
49
|
+
for (const field of fields.filter(not(isCustomField))) {
|
|
50
50
|
writer
|
|
51
51
|
.write(`'${getFieldName(field)}'?: ${getFieldType(field)}${field.list ? ' | string' : ''}${field.nonNull ? '' : ' | null'},`)
|
|
52
52
|
.newLine();
|
|
@@ -56,7 +56,7 @@ export const generateDBModels = (rawModels) => {
|
|
|
56
56
|
writer
|
|
57
57
|
.write(`export type ${model.name}Seed = `)
|
|
58
58
|
.inlineBlock(() => {
|
|
59
|
-
for (const field of fields.filter(not(
|
|
59
|
+
for (const field of fields.filter(not(isCustomField))) {
|
|
60
60
|
const fieldName = getFieldName(field);
|
|
61
61
|
writer
|
|
62
62
|
.write(`'${getFieldName(field)}'${field.nonNull && field.defaultValue === undefined && !OPTIONAL_SEED_FIELDS.includes(fieldName) ? '' : '?'}: ${field.kind === 'enum' ? (field.list ? 'string[]' : 'string') : getFieldType(field)}${field.list ? ' | string' : ''}${field.nonNull ? '' : ' | null'},`)
|
|
@@ -84,8 +84,8 @@ const getFieldType = (field) => {
|
|
|
84
84
|
return 'string';
|
|
85
85
|
case 'enum':
|
|
86
86
|
return field.type + (field.list ? '[]' : '');
|
|
87
|
-
case '
|
|
88
|
-
throw new Error(`
|
|
87
|
+
case 'custom':
|
|
88
|
+
throw new Error(`Custom fields are not in the db.`);
|
|
89
89
|
case 'primitive':
|
|
90
90
|
case undefined:
|
|
91
91
|
return get(PRIMITIVE_TYPES, field.type) + (field.list ? '[]' : '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/db/generate.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAyB,GAAG,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/db/generate.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAyB,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AAE5F,MAAM,eAAe,GAAG;IACtB,EAAE,EAAE,QAAQ;IACZ,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,mBAAmB;CAC9B,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AAElH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAoB,EAAE,EAAE;IACvD,MAAM,MAAM,GAAoB,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;QAC7D,cAAc,EAAE,IAAI;QACpB,oBAAoB,EAAE,CAAC;KACxB,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,SAAS,EAAE,CAAC;IAE9D,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;QAC/C,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;KACvG;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,gDAAgD;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;YACjG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;YACrD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAEjB,MAAM;aACH,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,KAAK,CAAC;aACrC,WAAW,CAAC,GAAG,EAAE;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE;gBACrD,MAAM,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;aAC9G;QACH,CAAC,CAAC;aACD,SAAS,EAAE,CAAC;QAEf,MAAM;aACH,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,gBAAgB,CAAC;aAChD,WAAW,CAAC,GAAG,EAAE;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE;gBACrD,MAAM;qBACH,KAAK,CACJ,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CACtG,KAAK,CACN,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CACtE;qBACA,OAAO,EAAE,CAAC;aACd;QACH,CAAC,CAAC;aACD,SAAS,EAAE,CAAC;QAEf,MAAM;aACH,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,YAAY,CAAC;aAC5C,WAAW,CAAC,GAAG,EAAE;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE;gBACrD,MAAM;qBACH,KAAK,CACJ,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAC/E,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SACvB,GAAG,CACJ;qBACA,OAAO,EAAE,CAAC;aACd;QACH,CAAC,CAAC;aACD,SAAS,EAAE,CAAC;QAEf,MAAM;aACH,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,SAAS,CAAC;aACzC,WAAW,CAAC,GAAG,EAAE;YAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE;gBACrD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtC,MAAM;qBACH,KAAK,CACJ,IAAI,YAAY,CAAC,KAAK,CAAC,IACrB,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACxG,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GACrF,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAC7B,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CACrC;qBACA,OAAO,EAAE,CAAC;aACd;QACH,CAAC,CAAC;aACD,SAAS,EAAE,CAAC;KAChB;IAED,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;QACvD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/D;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAE7H,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,EAAE;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,QAAQ,IAAI,EAAE;QACZ,KAAK,MAAM;YACT,gCAAgC;YAChC,OAAO,QAAQ,CAAC;QAClB,KAAK,UAAU;YACb,8BAA8B;YAC9B,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,KAAK,QAAQ;YACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;YACP,MAAM,eAAe,GAAU,IAAI,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;SAClC;KACF;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAAE,EAAE;IACzD,MAAM,MAAM,GAAoB,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;QAC7D,cAAc,EAAE,IAAI;QACpB,oBAAoB,EAAE,CAAC;KACxB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE,CAAC;IACvD,MAAM;SACH,KAAK,CACJ,YAAY,MAAM;SACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,IAAI,SAAS,CAAC;SAC/E,IAAI,CAAC,IAAI,CAAC,cAAc,CAC5B;SACA,SAAS,EAAE,CAAC;IAEf,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;QACnE,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;YACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,MAAM;qBACH,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,8BAA8B,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,IAAI,WAAW,CAAC;qBACjH,OAAO,EAAE,CAAC;aACd;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { generate } from '@graphql-codegen/cli';
|
|
2
|
+
import { getSetting } from './settings';
|
|
3
|
+
export const generateGraphqlApiTypes = async () => {
|
|
4
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
5
|
+
await generate({
|
|
6
|
+
overwrite: true,
|
|
7
|
+
schema: `${generatedFolderPath}/schema.graphql`,
|
|
8
|
+
documents: null,
|
|
9
|
+
generates: {
|
|
10
|
+
[`${generatedFolderPath}/api/index.ts`]: {
|
|
11
|
+
plugins: ['typescript', 'typescript-resolvers', { add: { content: `import { DateTime } from 'luxon';` } }],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
config: {
|
|
15
|
+
scalars: {
|
|
16
|
+
DateTime: 'DateTime',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
export const generateGraphqlClientTypes = async () => {
|
|
22
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
23
|
+
await generate({
|
|
24
|
+
schema: `${generatedFolderPath}/schema.graphql`,
|
|
25
|
+
documents: ['./src/**/*.ts', './src/**/*.tsx'],
|
|
26
|
+
generates: {
|
|
27
|
+
[`${generatedFolderPath}/client/index.ts`]: {
|
|
28
|
+
plugins: ['typescript', 'typescript-operations', 'typescript-compatibility'],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
config: {
|
|
32
|
+
preResolveTypes: true,
|
|
33
|
+
namingConvention: 'keep',
|
|
34
|
+
nonOptionalTypename: true,
|
|
35
|
+
skipTypeNameForRoot: true,
|
|
36
|
+
avoidOptionals: {
|
|
37
|
+
// Avoids optionals on the level of the field
|
|
38
|
+
field: true,
|
|
39
|
+
},
|
|
40
|
+
scalars: {
|
|
41
|
+
DateTime: 'string',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/gqm/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,IAAI,EAAE;IAChD,MAAM,mBAAmB,GAAG,MAAM,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACpE,MAAM,QAAQ,CAAC;QACb,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,GAAG,mBAAmB,iBAAiB;QAC/C,SAAS,EAAE,IAAI;QACf,SAAS,EAAE;YACT,CAAC,GAAG,mBAAmB,eAAe,CAAC,EAAE;gBACvC,OAAO,EAAE,CAAC,YAAY,EAAE,sBAAsB,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,mCAAmC,EAAE,EAAE,CAAC;aAC3G;SACF;QACD,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,QAAQ,EAAE,UAAU;aACrB;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,IAAI,EAAE;IACnD,MAAM,mBAAmB,GAAG,MAAM,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACpE,MAAM,QAAQ,CAAC;QACb,MAAM,EAAE,GAAG,mBAAmB,iBAAiB;QAC/C,SAAS,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;QAC9C,SAAS,EAAE;YACT,CAAC,GAAG,mBAAmB,kBAAkB,CAAC,EAAE;gBAC1C,OAAO,EAAE,CAAC,YAAY,EAAE,uBAAuB,EAAE,0BAA0B,CAAC;aAC7E;SACF;QACD,MAAM,EAAE;YACN,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,MAAM;YACxB,mBAAmB,EAAE,IAAI;YACzB,mBAAmB,EAAE,IAAI;YACzB,cAAc,EAAE;gBACd,6CAA6C;gBAC7C,KAAK,EAAE,IAAI;aACZ;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,QAAQ;aACnB;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './codegen';
|
|
2
|
+
export * from './parse-knexfile';
|
|
3
|
+
export * from './parse-models';
|
|
4
|
+
export * from './readline';
|
|
5
|
+
export * from './settings';
|
|
6
|
+
export * from './static-eval';
|
|
7
|
+
export * from './templates';
|
|
8
|
+
export * from './utils';
|
|
9
|
+
export * from './visitor';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// created from 'create-ts-index'
|
|
2
|
+
export * from './codegen';
|
|
3
|
+
export * from './parse-knexfile';
|
|
4
|
+
export * from './parse-models';
|
|
5
|
+
export * from './readline';
|
|
6
|
+
export * from './settings';
|
|
7
|
+
export * from './static-eval';
|
|
8
|
+
export * from './templates';
|
|
9
|
+
export * from './utils';
|
|
10
|
+
export * from './visitor';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/gqm/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AAEjC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IndentationText, Project } from 'ts-morph';
|
|
2
|
+
import { ensureFileExists } from './settings';
|
|
3
|
+
import { staticEval } from './static-eval';
|
|
4
|
+
import { KNEXFILE } from './templates';
|
|
5
|
+
import { findDeclarationInFile } from './utils';
|
|
6
|
+
export const KNEXFILE_PATH = `knexfile.ts`;
|
|
7
|
+
export const parseKnexfile = async () => {
|
|
8
|
+
const project = new Project({
|
|
9
|
+
manipulationSettings: {
|
|
10
|
+
indentationText: IndentationText.TwoSpaces,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
ensureFileExists(KNEXFILE_PATH, KNEXFILE);
|
|
14
|
+
const sourceFile = project.addSourceFileAtPath(KNEXFILE_PATH);
|
|
15
|
+
const configDeclaration = findDeclarationInFile(sourceFile, 'config');
|
|
16
|
+
const config = staticEval(configDeclaration, {});
|
|
17
|
+
return config;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=parse-knexfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-knexfile.js","sourceRoot":"","sources":["../../../src/gqm/parse-knexfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,oBAAoB,EAAE;YACpB,eAAe,EAAE,eAAe,CAAC,SAAS;SAC3C;KACF,CAAC,CAAC;IACH,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IndentationText, Project } from 'ts-morph';
|
|
2
|
+
import { getSetting, writeToFile } from './settings';
|
|
3
|
+
import { staticEval } from './static-eval';
|
|
4
|
+
import { findDeclarationInFile } from './utils';
|
|
5
|
+
export const parseModels = async () => {
|
|
6
|
+
const project = new Project({
|
|
7
|
+
manipulationSettings: {
|
|
8
|
+
indentationText: IndentationText.TwoSpaces,
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
const modelsPath = await getSetting('modelsPath');
|
|
12
|
+
const sourceFile = project.addSourceFileAtPath(modelsPath);
|
|
13
|
+
const modelsDeclaration = findDeclarationInFile(sourceFile, 'rawModels');
|
|
14
|
+
const rawModels = staticEval(modelsDeclaration, {});
|
|
15
|
+
const generatedFolderPath = await getSetting('generatedFolderPath');
|
|
16
|
+
writeToFile(`${generatedFolderPath}/models.json`, JSON.stringify(rawModels, null, 2));
|
|
17
|
+
return rawModels;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=parse-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-models.js","sourceRoot":"","sources":["../../../src/gqm/parse-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;IACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,oBAAoB,EAAE;YACpB,eAAe,EAAE,eAAe,CAAC,SAAS;SAC3C;KACF,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAE3D,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAEzE,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAEpD,MAAM,mBAAmB,GAAG,MAAM,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACpE,WAAW,CAAC,GAAG,mBAAmB,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEtF,OAAO,SAAsB,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const readLine: (prompt: string) => Promise<string>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import readline from 'readline';
|
|
2
|
+
export const readLine = (prompt) => {
|
|
3
|
+
const rl = readline.createInterface({
|
|
4
|
+
input: process.stdin,
|
|
5
|
+
output: process.stdout,
|
|
6
|
+
});
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
rl.question(prompt, (answer) => {
|
|
9
|
+
rl.close();
|
|
10
|
+
resolve(answer);
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=readline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readline.js","sourceRoot":"","sources":["../../../src/gqm/readline.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAmB,EAAE;IAC1D,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type Settings = {
|
|
2
|
+
modelsPath: string;
|
|
3
|
+
generatedFolderPath: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const getSettings: () => Promise<Settings>;
|
|
6
|
+
export declare const getSetting: (name: keyof Settings) => Promise<string>;
|
|
7
|
+
export declare const ensureFileExists: (filePath: string, content: string) => void;
|
|
8
|
+
export declare const writeToFile: (filePath: string, content: string) => void;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import { dirname } from 'path';
|
|
3
|
+
import { readLine } from './readline';
|
|
4
|
+
import { CLIENT_CODEGEN, EMPTY_MODELS, GRAPHQL_CODEGEN } from './templates';
|
|
5
|
+
const SETTINGS_PATH = '.gqmrc.json';
|
|
6
|
+
const DEFAULTS = {
|
|
7
|
+
modelsPath: {
|
|
8
|
+
question: 'What is the models path?',
|
|
9
|
+
defaultValue: 'src/config/models.ts',
|
|
10
|
+
init: (path) => {
|
|
11
|
+
ensureFileExists(path, EMPTY_MODELS);
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
generatedFolderPath: {
|
|
15
|
+
question: 'What is the path for generated stuff?',
|
|
16
|
+
defaultValue: 'src/generated',
|
|
17
|
+
init: (path) => {
|
|
18
|
+
ensureFileExists(`${path}/.gitkeep`, '');
|
|
19
|
+
ensureFileExists(`${path}/db/.gitkeep`, '');
|
|
20
|
+
ensureFileExists(`${path}/api/.gitkeep`, '');
|
|
21
|
+
ensureFileExists(`${path}/client/.gitkeep`, '');
|
|
22
|
+
ensureFileExists(`graphql-codegen.yml`, GRAPHQL_CODEGEN(path));
|
|
23
|
+
ensureFileExists(`client-codegen.yml`, CLIENT_CODEGEN(path));
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
const initSetting = async (name) => {
|
|
28
|
+
const { question, defaultValue, init } = DEFAULTS[name];
|
|
29
|
+
const value = (await readLine(`${question} (${defaultValue})`)) || defaultValue;
|
|
30
|
+
init(value);
|
|
31
|
+
return value;
|
|
32
|
+
};
|
|
33
|
+
const initSettings = async () => {
|
|
34
|
+
const settings = {};
|
|
35
|
+
for (const name of Object.keys(DEFAULTS)) {
|
|
36
|
+
settings[name] = await initSetting(name);
|
|
37
|
+
}
|
|
38
|
+
saveSettings(settings);
|
|
39
|
+
};
|
|
40
|
+
const saveSettings = (settings) => {
|
|
41
|
+
writeToFile(SETTINGS_PATH, JSON.stringify(settings, null, 2));
|
|
42
|
+
};
|
|
43
|
+
export const getSettings = async () => {
|
|
44
|
+
if (!existsSync(SETTINGS_PATH)) {
|
|
45
|
+
await initSettings();
|
|
46
|
+
}
|
|
47
|
+
return JSON.parse(readFileSync(SETTINGS_PATH, 'utf8'));
|
|
48
|
+
};
|
|
49
|
+
export const getSetting = async (name) => {
|
|
50
|
+
const settings = await getSettings();
|
|
51
|
+
if (!(name in settings)) {
|
|
52
|
+
settings[name] = await initSetting(name);
|
|
53
|
+
saveSettings(settings);
|
|
54
|
+
}
|
|
55
|
+
return settings[name];
|
|
56
|
+
};
|
|
57
|
+
const ensureDirectoryExists = (filePath) => {
|
|
58
|
+
const dir = dirname(filePath);
|
|
59
|
+
if (existsSync(dir)) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
ensureDirectoryExists(dir);
|
|
63
|
+
try {
|
|
64
|
+
mkdirSync(dir);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
if (err.code === 'EEXIST') {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
export const ensureFileExists = (filePath, content) => {
|
|
75
|
+
if (!existsSync(filePath)) {
|
|
76
|
+
console.info(`Creating ${filePath}`);
|
|
77
|
+
ensureDirectoryExists(filePath);
|
|
78
|
+
writeFileSync(filePath, content);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
export const writeToFile = (filePath, content) => {
|
|
82
|
+
ensureDirectoryExists(filePath);
|
|
83
|
+
if (existsSync(filePath)) {
|
|
84
|
+
const currentContent = readFileSync(filePath, 'utf-8');
|
|
85
|
+
if (content === currentContent) {
|
|
86
|
+
// console.info(`${filePath} unchanged`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
writeFileSync(filePath, content);
|
|
90
|
+
console.info(`${filePath} updated`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
writeFileSync(filePath, content);
|
|
95
|
+
console.info(`Created ${filePath}`);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/gqm/settings.ts"],"names":[],"mappings":"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"}
|