@ackee/create-node-app 1.0.1 → 2.0.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.
Files changed (149) hide show
  1. package/AUTHORS +2 -1
  2. package/README.md +26 -18
  3. package/docs/development.md +42 -0
  4. package/lib/Bootstrap.js +106 -65
  5. package/lib/Bootstrap.js.map +1 -1
  6. package/lib/Builder.js +111 -0
  7. package/lib/Builder.js.map +1 -0
  8. package/lib/Files.js +21 -0
  9. package/lib/Files.js.map +1 -0
  10. package/lib/Logger.js +26 -8
  11. package/lib/Logger.js.map +1 -1
  12. package/lib/Mergers/ConfigMerger.js +22 -0
  13. package/lib/Mergers/ConfigMerger.js.map +1 -0
  14. package/lib/Mergers/ContainerMerger.js +172 -0
  15. package/lib/Mergers/ContainerMerger.js.map +1 -0
  16. package/lib/Mergers/EnvJsoncMerger.js +20 -0
  17. package/lib/Mergers/EnvJsoncMerger.js.map +1 -0
  18. package/lib/Mergers/Merger.js +36 -0
  19. package/lib/Mergers/Merger.js.map +1 -0
  20. package/lib/Mergers/PackageJsonMerger.js +36 -0
  21. package/lib/Mergers/PackageJsonMerger.js.map +1 -0
  22. package/lib/Npm.js +40 -12
  23. package/lib/Npm.js.map +1 -1
  24. package/lib/PackageJson.js +4 -4
  25. package/lib/PackageJson.js.map +1 -1
  26. package/lib/StarterLoader.js +86 -0
  27. package/lib/StarterLoader.js.map +1 -0
  28. package/package.json +8 -5
  29. package/src/Bootstrap.ts +123 -82
  30. package/src/Builder.ts +172 -0
  31. package/src/Files.ts +22 -0
  32. package/src/Logger.ts +26 -7
  33. package/src/Mergers/ConfigMerger.ts +28 -0
  34. package/src/Mergers/ContainerMerger.ts +241 -0
  35. package/src/Mergers/EnvJsoncMerger.ts +24 -0
  36. package/src/Mergers/Merger.ts +51 -0
  37. package/src/Mergers/PackageJsonMerger.ts +45 -0
  38. package/src/Npm.ts +60 -15
  39. package/src/PackageJson.ts +6 -4
  40. package/src/Starter.ts +2 -2
  41. package/src/StarterLoader.ts +148 -0
  42. package/starter/{cloudrun → _base}/.env.jsonc +1 -5
  43. package/starter/{cloudrun → _base}/.eslintrc.cjs +3 -2
  44. package/starter/_base/README.md +53 -0
  45. package/starter/_base/package.json +45 -0
  46. package/starter/{cloudrun → _base}/src/adapters/pino.logger.ts +1 -1
  47. package/starter/_base/src/config.ts +16 -0
  48. package/starter/{cloudrun-graphql → _base}/src/container.ts +3 -1
  49. package/starter/_base/src/index.ts +14 -0
  50. package/starter/{cloudrun → _base}/src/view/cli/README.md +2 -6
  51. package/starter/api/graphql/.env.jsonc +8 -0
  52. package/starter/{cloudrun-graphql → api/graphql}/.eslintrc.cjs +4 -5
  53. package/starter/api/graphql/node-app.jsonc +6 -0
  54. package/starter/api/graphql/package.json +36 -0
  55. package/starter/{cloudrun-graphql → api/graphql}/src/config.ts +0 -4
  56. package/starter/api/graphql/src/index.ts +11 -0
  57. package/starter/{cloudrun-graphql → api/graphql}/src/test/helloWorld.test.ts +14 -3
  58. package/starter/api/graphql/src/view/graphql/context-factory.ts +13 -0
  59. package/starter/{cloudrun-graphql → api/graphql}/src/view/server.ts +16 -6
  60. package/starter/api/rest/.env.jsonc +6 -0
  61. package/starter/api/rest/.eslintrc.cjs +8 -0
  62. package/starter/api/rest/node-app.jsonc +6 -0
  63. package/starter/api/rest/package.json +25 -0
  64. package/starter/{cloudrun → api/rest}/src/config.ts +0 -5
  65. package/starter/api/rest/src/container.ts +13 -0
  66. package/starter/{cloudrun → api/rest}/src/index.ts +4 -4
  67. package/starter/{cloudrun → api/rest}/src/test/health-check.test.ts +3 -5
  68. package/starter/{cloudrun → api/rest}/src/test/util/openapi-test.util.ts +3 -3
  69. package/starter/{cloudrun → api/rest}/src/view/rest/middleware/error-handler.ts +1 -1
  70. package/starter/{cloudrun → api/rest}/src/view/rest/routes.ts +1 -1
  71. package/starter/{cloudrun → api/rest}/src/view/rest/util/openapi.util.ts +19 -19
  72. package/starter/{cloudrun → api/rest}/src/view/server.ts +6 -4
  73. package/starter/infra/postgresql-knex/.env.jsonc +5 -0
  74. package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.yml +1 -1
  75. package/starter/infra/postgresql-knex/knexfile.ts +16 -0
  76. package/starter/infra/postgresql-knex/node-app.jsonc +6 -0
  77. package/starter/infra/postgresql-knex/package.json +13 -0
  78. package/starter/infra/postgresql-knex/src/adapters/knex.database.test.ts +21 -0
  79. package/starter/infra/postgresql-knex/src/adapters/knex.database.ts +14 -0
  80. package/starter/infra/postgresql-knex/src/adapters/repositories/migration.repository.ts +24 -0
  81. package/starter/infra/postgresql-knex/src/config.ts +14 -0
  82. package/starter/infra/postgresql-knex/src/container.ts +23 -0
  83. package/starter/infra/postgresql-knex/src/db/migration.template.ts +4 -0
  84. package/starter/infra/postgresql-knex/src/db/migrations/.gitkeep +0 -0
  85. package/starter/infra/postgresql-knex/src/db/seed.template.ts +3 -0
  86. package/starter/infra/postgresql-knex/src/db/seeds/.gitkeep +0 -0
  87. package/starter/infra/postgresql-knex/src/domain/ports/database.d.ts +4 -0
  88. package/starter/infra/postgresql-knex/src/domain/ports/repositories/migration.repository.d.ts +9 -0
  89. package/starter/infra/postgresql-knex/src/test/setup.ts +16 -0
  90. package/starter/{shared → pipeline/cloudrun-gitlab}/.gitlab-ci.yml +15 -6
  91. package/starter/pipeline/cloudrun-gitlab/node-app.jsonc +6 -0
  92. package/tsconfig.tsbuildinfo +1 -1
  93. package/lib/Toolbelt.js +0 -102
  94. package/lib/Toolbelt.js.map +0 -1
  95. package/lib/cloudrun/CloudRunStarter.js +0 -127
  96. package/lib/cloudrun/CloudRunStarter.js.map +0 -1
  97. package/lib/cloudrun-graphql/GraphQLStarter.js +0 -118
  98. package/lib/cloudrun-graphql/GraphQLStarter.js.map +0 -1
  99. package/src/Toolbelt.ts +0 -132
  100. package/src/cloudrun/CloudRunStarter.ts +0 -182
  101. package/src/cloudrun-graphql/GraphQLStarter.ts +0 -182
  102. package/starter/cloudrun/README.md +0 -69
  103. package/starter/cloudrun/src/container.ts +0 -18
  104. package/starter/cloudrun/src/context.ts +0 -39
  105. package/starter/cloudrun/src/domain/errors/codes.ts +0 -9
  106. package/starter/cloudrun/src/domain/errors/errors.ts +0 -25
  107. package/starter/cloudrun/src/domain/ports/logger.d.ts +0 -21
  108. package/starter/cloudrun-graphql/.env.jsonc +0 -12
  109. package/starter/cloudrun-graphql/README.md +0 -53
  110. package/starter/cloudrun-graphql/src/adapters/pino.logger.ts +0 -44
  111. package/starter/cloudrun-graphql/src/index.ts +0 -11
  112. package/starter/shared/.gitignore_ +0 -5
  113. package/starter/shared/ci-branch-config/common.env +0 -7
  114. package/starter/shared/ci-branch-config/development.env +0 -7
  115. package/starter/shared/ci-branch-config/master.env +0 -7
  116. package/starter/shared/ci-branch-config/stage.env +0 -7
  117. package/starter/shared/docker-compose/docker-compose.override.yml +0 -5
  118. package/starter/shared/jest.config.js +0 -12
  119. /package/starter/{shared → _base}/.dockerignore +0 -0
  120. /package/starter/{cloudrun → _base}/.eslint.tsconfig.json +0 -0
  121. /package/starter/{shared → _base}/.mocha-junit-config.json +0 -0
  122. /package/starter/{shared → _base}/.mocharc.json +0 -0
  123. /package/starter/{shared → _base}/.nvmrc +0 -0
  124. /package/starter/{shared → _base}/Dockerfile +0 -0
  125. /package/starter/{shared → _base}/prettier.config.cjs +0 -0
  126. /package/starter/{cloudrun-graphql → _base}/src/context.ts +0 -0
  127. /package/starter/{cloudrun-graphql → _base}/src/domain/errors/codes.ts +0 -0
  128. /package/starter/{cloudrun-graphql → _base}/src/domain/errors/errors.ts +0 -0
  129. /package/starter/{cloudrun-graphql → _base}/src/domain/ports/logger.d.ts +0 -0
  130. /package/starter/{shared → _base}/src/test/setup.ts +0 -0
  131. /package/starter/{cloudrun → _base}/src/view/cli/cli.ts +0 -0
  132. /package/starter/{shared → _base}/tsconfig.json +0 -0
  133. /package/starter/{cloudrun-graphql → api/graphql}/.eslint.tsconfig.json +0 -0
  134. /package/starter/{cloudrun-graphql → api/graphql}/codegen.yml +0 -0
  135. /package/starter/{cloudrun-graphql → api/graphql}/src/view/controller.ts +0 -0
  136. /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/resolvers/greeting.resolver.ts +0 -0
  137. /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/resolvers.ts +0 -0
  138. /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/schema/schema.graphql +0 -0
  139. /package/starter/{cloudrun-graphql → api/graphql}/src/view/graphql/schema.ts +0 -0
  140. /package/starter/{cloudrun → api/rest}/src/domain/health-check.service.ts +0 -0
  141. /package/starter/{cloudrun → api/rest}/src/view/cli/openapi/generate.ts +0 -0
  142. /package/starter/{cloudrun/src/view/rest/controller → api/rest/src/view/rest/controllers}/health-check.controller.ts +0 -0
  143. /package/starter/{cloudrun → api/rest}/src/view/rest/middleware/context-middleware.ts +0 -0
  144. /package/starter/{cloudrun → api/rest}/src/view/rest/middleware/request-logger.ts +0 -0
  145. /package/starter/{cloudrun → api/rest}/src/view/rest/request.d.ts +0 -0
  146. /package/starter/{cloudrun → api/rest}/src/view/rest/spec/openapi.yml +0 -0
  147. /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose-entrypoint.sh +0 -0
  148. /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.ci.yml +0 -0
  149. /package/starter/{shared → infra/postgresql-knex}/docker-compose/docker-compose.local.yml +0 -0
package/lib/Toolbelt.js DELETED
@@ -1,102 +0,0 @@
1
- import * as path from 'path';
2
- import * as fs from 'fs';
3
- import { logger } from './Logger.js';
4
- export class Toolbelt {
5
- constructor(params) {
6
- this.npm = params.npm;
7
- this.packageJson = params.packageJson;
8
- this.assetDirectory = params.assetDirectory;
9
- this.sharedDirectory = params.sharedDirectory;
10
- this.destination = params.destination;
11
- this.projectName = params.projectName;
12
- }
13
- stringToPath(str) {
14
- return path.normalize(str);
15
- }
16
- isDirectoryEmpty(dirpath) {
17
- const path = this.stringToPath(dirpath);
18
- if (!fs.existsSync(path)) {
19
- return true;
20
- }
21
- const stat = fs.statSync(path);
22
- if (!stat.isDirectory()) {
23
- return true;
24
- }
25
- const contents = fs.readdirSync(path);
26
- return contents.length === 0;
27
- }
28
- mkdir(dirpath, option) {
29
- dirpath = this.stringToPath(dirpath);
30
- const rootPath = ['.', './'];
31
- if (!rootPath.includes(dirpath)) {
32
- if (fs.existsSync(dirpath) && option?.overwrite) {
33
- fs.rmSync(dirpath, { recursive: true });
34
- }
35
- fs.mkdirSync(dirpath, { recursive: true });
36
- }
37
- }
38
- /**
39
- * Like cp, but second argument does not need to include file name
40
- * the name is preserved.
41
- */
42
- cpFile(a, b, option) {
43
- a = this.stringToPath(a);
44
- b = this.stringToPath(b);
45
- const file = path.basename(a);
46
- this.cp(a, this.stringToPath(`${b}/${option?.destFileName ?? file}`));
47
- }
48
- cp(a, b) {
49
- a = this.stringToPath(a);
50
- b = this.stringToPath(b);
51
- logger.info(`> cp ${a} ${b}`);
52
- fs.copyFileSync(a, b);
53
- }
54
- copyAsset(name, destination) {
55
- let destinationName = name;
56
- if (path.basename(name) === '.gitignore') {
57
- name = '.gitignore_';
58
- destinationName = '.gitignore';
59
- }
60
- name = this.stringToPath(name);
61
- destination = this.stringToPath(this.destination);
62
- this.cpFile(`${this.assetDirectory}/${name}`, destination, {
63
- destFileName: destinationName,
64
- });
65
- }
66
- copySharedAsset(name, destination) {
67
- let destinationName = name;
68
- if (path.basename(name) === '.gitignore') {
69
- name = '.gitignore_';
70
- destinationName = '.gitignore';
71
- }
72
- name = this.stringToPath(name);
73
- destination = this.stringToPath(this.destination);
74
- this.cpFile(`${this.sharedDirectory}/${name}`, destination, {
75
- destFileName: destinationName,
76
- });
77
- }
78
- replaceInFile(filePath, placeholder, replacement = 'REPLACEME') {
79
- filePath = this.stringToPath(`${this.destination}/${filePath}`);
80
- let content = fs.readFileSync(filePath, 'utf8');
81
- /* eslint-disable-next-line security/detect-non-literal-regexp */
82
- content = content.replace(new RegExp(placeholder, 'g'), replacement);
83
- fs.writeFileSync(filePath, content);
84
- }
85
- symlink(linkName, linkedFile) {
86
- linkName = this.stringToPath(linkName);
87
- linkedFile = this.stringToPath(linkedFile);
88
- logger.info(`> ln -s ${linkName} ${linkedFile}`);
89
- try {
90
- fs.symlinkSync(linkedFile, linkName);
91
- }
92
- catch (error) {
93
- if ('code' in error && error.code === 'EEXIST') {
94
- // OK
95
- }
96
- else {
97
- throw error;
98
- }
99
- }
100
- }
101
- }
102
- //# sourceMappingURL=Toolbelt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Toolbelt.js","sourceRoot":"","sources":["../src/Toolbelt.ts"],"names":[],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- export class CloudRunStarter {
2
- constructor() {
3
- this.name = 'cloudrun';
4
- }
5
- setToolbelt(toolbelt) {
6
- this.toolbelt = toolbelt;
7
- return this;
8
- }
9
- install() {
10
- if (this.toolbelt == null) {
11
- throw new Error('No toolbelt');
12
- }
13
- const tb = this.toolbelt;
14
- tb.copySharedAsset('.gitignore');
15
- tb.copySharedAsset('.gitlab-ci.yml');
16
- tb.copySharedAsset('.nvmrc');
17
- tb.copySharedAsset('Dockerfile');
18
- tb.copySharedAsset('.dockerignore');
19
- tb.mkdir(tb.stringToPath(`${tb.destination}/ci-branch-config`));
20
- tb.copySharedAsset('ci-branch-config/common.env');
21
- tb.replaceInFile(`ci-branch-config/common.env`, '{{PROJECT_NAME}}', tb.projectName);
22
- tb.copySharedAsset('ci-branch-config/development.env');
23
- tb.replaceInFile(`ci-branch-config/development.env`, '{{PROJECT_NAME}}', tb.projectName);
24
- tb.copySharedAsset('ci-branch-config/stage.env');
25
- tb.replaceInFile(`ci-branch-config/stage.env`, '{{PROJECT_NAME}}', tb.projectName);
26
- tb.copySharedAsset('ci-branch-config/master.env');
27
- tb.replaceInFile(`ci-branch-config/master.env`, '{{PROJECT_NAME}}', tb.projectName);
28
- tb.mkdir(tb.stringToPath(`${tb.destination}/docker-compose`));
29
- tb.copySharedAsset('docker-compose/docker-compose-entrypoint.sh');
30
- tb.copySharedAsset('docker-compose/docker-compose.ci.yml');
31
- tb.copySharedAsset('docker-compose/docker-compose.local.yml');
32
- tb.symlink(`${tb.destination}/docker-compose/docker-compose.override.yml`, `${tb.destination}/docker-compose/docker-compose.local.yml`);
33
- tb.copySharedAsset('docker-compose/docker-compose.yml');
34
- tb.replaceInFile(`docker-compose/docker-compose.yml`, '{{PROJECT_NAME}}', tb.projectName);
35
- tb.npm.iDev('typescript');
36
- tb.npm.iDev('@types/node');
37
- tb.npm.iDev('ts-node');
38
- tb.npm.i('source-map-support');
39
- tb.copySharedAsset('tsconfig.json');
40
- tb.packageJson.setType('module');
41
- tb.packageJson.addNpmScript('build', 'tsc');
42
- tb.packageJson.addNpmScript('start', 'node -r source-map-support/register dist/index.js');
43
- tb.npm.i('configuru');
44
- tb.npm.i('pino');
45
- tb.npm.i('pino-http');
46
- tb.npm.iDev('pino-pretty');
47
- tb.copyAsset('.env.jsonc');
48
- tb.mkdir(tb.stringToPath(`${tb.destination}/src`));
49
- tb.copyAsset('src/config.ts');
50
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/adapters`));
51
- tb.copyAsset('src/container.ts');
52
- tb.copyAsset('src/context.ts');
53
- tb.copyAsset('src/index.ts');
54
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view`));
55
- tb.copyAsset(`/src/view/server.ts`);
56
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/rest`));
57
- tb.copyAsset(`/src/view/rest/request.d.ts`);
58
- tb.copyAsset(`/src/view/rest/routes.ts`);
59
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/rest/controller`));
60
- tb.copyAsset(`/src/view/rest/controller/health-check.controller.ts`);
61
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/rest/middleware`));
62
- tb.copyAsset(`/src/view/rest/middleware/context-middleware.ts`);
63
- tb.copyAsset(`/src/view/rest/middleware/error-handler.ts`);
64
- tb.copyAsset(`/src/view/rest/middleware/request-logger.ts`);
65
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/rest/util`));
66
- tb.copyAsset(`/src/view/rest/util/openapi.util.ts`);
67
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/rest/spec`));
68
- tb.copyAsset(`/src/view/rest/spec/openapi.yml`);
69
- tb.npm.i('node-healthz');
70
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/domain`));
71
- tb.copyAsset('src/domain/health-check.service.ts');
72
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/domain/errors`));
73
- tb.copyAsset('src/domain/errors/errors.ts');
74
- tb.copyAsset('src/domain/errors/codes.ts');
75
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/domain/util`));
76
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/domain/ports`));
77
- tb.copyAsset('src/domain/ports/logger.d.ts');
78
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/adapters`));
79
- tb.copyAsset('src/adapters/pino.logger.ts');
80
- tb.npm.i('express');
81
- tb.npm.iDev('@types/express');
82
- tb.npm.iDev('mocha');
83
- tb.npm.iDev('mocha-junit-reporter');
84
- tb.npm.iDev('mocha-multi-reporters');
85
- tb.npm.iDev('nyc');
86
- tb.npm.iDev('@types/mocha');
87
- tb.npm.iDev('@istanbuljs/nyc-config-typescript');
88
- tb.npm.iDev('supertest');
89
- tb.npm.iDev('@types/supertest');
90
- tb.copySharedAsset('.mocharc.json', tb.destination);
91
- tb.copySharedAsset('.mocha-junit-config.json', tb.destination);
92
- tb.packageJson.addNpmScript('test', 'mocha');
93
- tb.packageJson.addNpmScript('ci-test:no-coverage', 'npm run test -- --parallel=false -R mocha-multi-reporters --reporter-options configFile=.mocha-junit-config.json');
94
- tb.packageJson.addNpmScript('ci-test', 'nyc -a -r cobertura --report-dir output npm run ci-test:no-coverage');
95
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/test`));
96
- tb.copySharedAsset('src/test/setup.ts');
97
- tb.copyAsset('src/test/health-check.test.ts');
98
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/test/util`));
99
- tb.copyAsset('src/test/util/openapi-test.util.ts');
100
- tb.npm.iDev('@ackee/styleguide-backend-config');
101
- tb.npm.iDev('prettier');
102
- tb.npm.iDev('eslint');
103
- tb.npm.iDev('eslint-formatter-gitlab@^5.0.0');
104
- tb.copyAsset('.eslint.tsconfig.json');
105
- tb.copyAsset('.eslintrc.cjs');
106
- tb.copySharedAsset('prettier.config.cjs');
107
- tb.packageJson.addNpmScript('prettier', "prettier --check --write '**/*.{ts,js,json,md}'");
108
- tb.packageJson.addNpmScript('lint', "eslint '**/*.ts' -f codeframe --fix");
109
- tb.packageJson.addNpmScript('codestyle', 'npm run prettier && npm run lint');
110
- tb.packageJson.addNpmScript('ci-lint', 'npm run lint -- -f checkstyle -o ./output/checkstyle-result.xml');
111
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/cli`));
112
- tb.copyAsset('src/view/cli/cli.ts');
113
- tb.copyAsset('src/view/cli/README.md');
114
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/cli/openapi`));
115
- tb.copyAsset('src/view/cli/openapi/generate.ts');
116
- tb.npm.iDev('yargs');
117
- tb.npm.iDev('@types/yargs');
118
- tb.npm.iDev('yaml');
119
- tb.packageJson.addNpmScript('cli', 'tsx ./src/view/cli/cli.ts');
120
- tb.npm.iDev('openapi-typescript');
121
- tb.npm.iDev('tsx');
122
- tb.packageJson.addNpmScript('generate:api', 'npm run cli openapi generate src/view/rest/spec/openapi.yml && npm run codestyle');
123
- tb.packageJson.runScript('generate:api');
124
- tb.packageJson.runScript('build');
125
- }
126
- }
127
- //# sourceMappingURL=CloudRunStarter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CloudRunStarter.js","sourceRoot":"","sources":["../../src/cloudrun/CloudRunStarter.ts"],"names":[],"mappings":"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"}
@@ -1,118 +0,0 @@
1
- export class GraphQLStarter {
2
- constructor() {
3
- this.name = 'cloudrun-graphql';
4
- }
5
- setToolbelt(toolbelt) {
6
- this.toolbelt = toolbelt;
7
- return this;
8
- }
9
- install() {
10
- if (this.toolbelt == null) {
11
- throw new Error('No toolbelt');
12
- }
13
- const tb = this.toolbelt;
14
- tb.copySharedAsset('.gitignore');
15
- tb.copySharedAsset('.gitlab-ci.yml');
16
- tb.copySharedAsset('.nvmrc');
17
- tb.copySharedAsset('Dockerfile');
18
- tb.copySharedAsset('.dockerignore');
19
- tb.mkdir(tb.stringToPath(`${tb.destination}/ci-branch-config`));
20
- tb.copySharedAsset('ci-branch-config/common.env');
21
- tb.replaceInFile(`ci-branch-config/common.env`, '{{PROJECT_NAME}}', tb.projectName);
22
- tb.copySharedAsset('ci-branch-config/development.env');
23
- tb.replaceInFile(`ci-branch-config/development.env`, '{{PROJECT_NAME}}', tb.projectName);
24
- tb.copySharedAsset('ci-branch-config/stage.env');
25
- tb.replaceInFile(`ci-branch-config/stage.env`, '{{PROJECT_NAME}}', tb.projectName);
26
- tb.copySharedAsset('ci-branch-config/master.env');
27
- tb.replaceInFile(`ci-branch-config/master.env`, '{{PROJECT_NAME}}', tb.projectName);
28
- tb.mkdir(tb.stringToPath(`${tb.destination}/docker-compose`));
29
- tb.copySharedAsset('docker-compose/docker-compose-entrypoint.sh');
30
- tb.copySharedAsset('docker-compose/docker-compose.ci.yml');
31
- tb.copySharedAsset('docker-compose/docker-compose.local.yml');
32
- tb.copySharedAsset('docker-compose/docker-compose.override.yml');
33
- tb.symlink(`${tb.destination}/docker-compose/docker-compose.override.yml`, `${tb.destination}/docker-compose/docker-compose.local.yml`);
34
- tb.copySharedAsset('docker-compose/docker-compose.yml');
35
- tb.replaceInFile(`docker-compose/docker-compose.yml`, '{{PROJECT_NAME}}', tb.projectName);
36
- tb.npm.iDev('typescript');
37
- tb.npm.iDev('@types/node');
38
- tb.npm.iDev('ts-node');
39
- tb.npm.i('source-map-support');
40
- tb.copySharedAsset('tsconfig.json');
41
- tb.packageJson.addNpmScript('build:graphql-types', 'graphql-codegen --config codegen.yml');
42
- tb.packageJson.addNpmScript('build:copy-schema', 'mkdir -p ./dist/view/graphql/schema && cp -r ./src/view/graphql/schema ./dist/view/graphql/schema');
43
- tb.packageJson.addNpmScript('build', 'npm run build:graphql-types && npm run build:copy-schema && tsc');
44
- tb.packageJson.addNpmScript('start', 'node -r source-map-support/register dist/index.js');
45
- tb.npm.i('configuru');
46
- tb.npm.i('pino');
47
- tb.npm.iDev('pino-pretty');
48
- tb.copyAsset('.env.jsonc');
49
- tb.mkdir(tb.stringToPath(`${tb.destination}/src`));
50
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view`));
51
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/domain`));
52
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/domain/errors`));
53
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/domain/ports`));
54
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/domain/utils`));
55
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/adapters`));
56
- tb.copyAsset('src/domain/errors/codes.ts');
57
- tb.copyAsset('src/domain/errors/errors.ts');
58
- tb.copyAsset('src/domain/errors/errors.ts');
59
- tb.copyAsset('src/domain/ports/logger.d.ts');
60
- tb.copyAsset('src/adapters/pino.logger.ts');
61
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/graphql`));
62
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/graphql/resolvers`));
63
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/view/graphql/schema`));
64
- tb.copyAsset('src/config.ts');
65
- tb.copyAsset('src/index.ts');
66
- tb.copyAsset('src/container.ts');
67
- tb.copyAsset('src/context.ts');
68
- tb.copyAsset('codegen.yml');
69
- tb.copyAsset('src/view/controller.ts');
70
- tb.copyAsset('src/view/server.ts');
71
- tb.copyAsset('src/view/graphql/schema.ts');
72
- tb.copyAsset('src/view/graphql/resolvers.ts');
73
- tb.copyAsset('src/view/graphql/resolvers/greeting.resolver.ts');
74
- tb.copyAsset('src/view/graphql/schema/schema.graphql');
75
- tb.npm.iDev('mocha');
76
- tb.npm.iDev('mocha-junit-reporter');
77
- tb.npm.iDev('mocha-multi-reporters');
78
- tb.npm.iDev('nyc');
79
- tb.npm.iDev('tsx');
80
- tb.npm.iDev('@types/mocha');
81
- tb.npm.iDev('@istanbuljs/nyc-config-typescript');
82
- tb.copySharedAsset('.mocharc.json', tb.destination);
83
- tb.copySharedAsset('.mocha-junit-config.json', tb.destination);
84
- tb.packageJson.setType('module');
85
- tb.packageJson.addNpmScript('test', 'mocha');
86
- tb.packageJson.addNpmScript('ci-test:no-coverage', 'npm run test -- --parallel=false -R mocha-multi-reporters --reporter-options configFile=.mocha-junit-config.json');
87
- tb.packageJson.addNpmScript('ci-test', 'nyc -a -r cobertura --report-dir output npm run ci-test:no-coverage');
88
- tb.mkdir(tb.stringToPath(`${tb.destination}/src/test`));
89
- tb.copySharedAsset('src/test/setup.ts');
90
- tb.copyAsset('src/test/helloWorld.test.ts');
91
- tb.npm.i('@as-integrations/express5');
92
- tb.npm.iDev('@ackee/styleguide-backend-config');
93
- tb.npm.iDev('prettier');
94
- tb.npm.iDev('eslint');
95
- tb.npm.iDev('eslint-formatter-gitlab@^5.0.0');
96
- tb.copyAsset('.eslint.tsconfig.json');
97
- tb.copyAsset('.eslintrc.cjs');
98
- tb.copySharedAsset('prettier.config.cjs');
99
- tb.packageJson.addNpmScript('prettier', "prettier --check --write '**/*.{ts,js,json,md}'");
100
- tb.packageJson.addNpmScript('lint', 'eslint --ext .ts --ext .graphql src -f codeframe --fix');
101
- tb.packageJson.addNpmScript('codestyle', 'npm run prettier && npm run lint');
102
- tb.packageJson.addNpmScript('ci-lint', 'npm run lint -- -f checkstyle -o ./output/checkstyle-result.xml');
103
- tb.npm.i('@apollo/server');
104
- tb.npm.iDev('@graphql-codegen/cli');
105
- tb.npm.iDev('lodash');
106
- tb.npm.iDev('@graphql-eslint/eslint-plugin');
107
- tb.npm.iDev('@graphql-codegen/typescript');
108
- tb.npm.iDev('@graphql-codegen/typescript-resolvers');
109
- tb.npm.i('@graphql-tools/load-files');
110
- tb.npm.i('@graphql-tools/merge');
111
- tb.npm.i('@graphql-tools/schema');
112
- tb.npm.i('graphql');
113
- tb.npm.i('express');
114
- tb.npm.iDev('@types/express');
115
- tb.packageJson.runScript('build');
116
- }
117
- }
118
- //# sourceMappingURL=GraphQLStarter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GraphQLStarter.js","sourceRoot":"","sources":["../../src/cloudrun-graphql/GraphQLStarter.ts"],"names":[],"mappings":"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"}
package/src/Toolbelt.ts DELETED
@@ -1,132 +0,0 @@
1
- import * as path from 'path'
2
- import * as fs from 'fs'
3
- import { PackageJson } from './PackageJson.js'
4
- import { Npm } from './Npm.js'
5
- import { logger } from './Logger.js'
6
- import { Path } from './types.js'
7
-
8
- export class Toolbelt {
9
- public readonly npm: Npm
10
- public readonly packageJson: PackageJson
11
- readonly assetDirectory: string
12
- readonly sharedDirectory: string
13
- readonly destination: string
14
- readonly projectName?: string
15
- constructor(params: {
16
- npm: Npm
17
- packageJson: PackageJson
18
- assetDirectory: string
19
- sharedDirectory: string
20
- destination: string
21
- projectName?: string
22
- }) {
23
- this.npm = params.npm
24
- this.packageJson = params.packageJson
25
- this.assetDirectory = params.assetDirectory
26
- this.sharedDirectory = params.sharedDirectory
27
- this.destination = params.destination
28
- this.projectName = params.projectName
29
- }
30
- public stringToPath(str: string) {
31
- return path.normalize(str) as Path
32
- }
33
-
34
- public isDirectoryEmpty(dirpath: string): boolean {
35
- const path = this.stringToPath(dirpath)
36
-
37
- if (!fs.existsSync(path)) {
38
- return true
39
- }
40
-
41
- const stat = fs.statSync(path)
42
- if (!stat.isDirectory()) {
43
- return true
44
- }
45
-
46
- const contents = fs.readdirSync(path)
47
- return contents.length === 0
48
- }
49
-
50
- public mkdir(
51
- dirpath: string,
52
- option?: {
53
- /** If exists, remove recursively first */
54
- overwrite?: boolean
55
- }
56
- ) {
57
- dirpath = this.stringToPath(dirpath)
58
- const rootPath = ['.', './']
59
- if (!rootPath.includes(dirpath)) {
60
- if (fs.existsSync(dirpath) && option?.overwrite) {
61
- fs.rmSync(dirpath, { recursive: true })
62
- }
63
- fs.mkdirSync(dirpath, { recursive: true })
64
- }
65
- }
66
- /**
67
- * Like cp, but second argument does not need to include file name
68
- * the name is preserved.
69
- */
70
- public cpFile(a: string, b: string, option?: { destFileName?: string }) {
71
- a = this.stringToPath(a)
72
- b = this.stringToPath(b)
73
- const file = path.basename(a)
74
- this.cp(a, this.stringToPath(`${b}/${option?.destFileName ?? file}`))
75
- }
76
-
77
- public cp(a: string, b: string) {
78
- a = this.stringToPath(a)
79
- b = this.stringToPath(b)
80
- logger.info(`> cp ${a} ${b}`)
81
- fs.copyFileSync(a, b)
82
- }
83
- public copyAsset(name: string, destination?: string) {
84
- let destinationName = name
85
- if (path.basename(name) === '.gitignore') {
86
- name = '.gitignore_'
87
- destinationName = '.gitignore'
88
- }
89
- name = this.stringToPath(name)
90
- destination = this.stringToPath(this.destination)
91
- this.cpFile(`${this.assetDirectory}/${name}`, destination, {
92
- destFileName: destinationName,
93
- })
94
- }
95
- public copySharedAsset(name: string, destination?: string) {
96
- let destinationName = name
97
- if (path.basename(name) === '.gitignore') {
98
- name = '.gitignore_'
99
- destinationName = '.gitignore'
100
- }
101
- name = this.stringToPath(name)
102
- destination = this.stringToPath(this.destination)
103
- this.cpFile(`${this.sharedDirectory}/${name}`, destination, {
104
- destFileName: destinationName,
105
- })
106
- }
107
- public replaceInFile(
108
- filePath: string,
109
- placeholder: string,
110
- replacement: string = 'REPLACEME'
111
- ) {
112
- filePath = this.stringToPath(`${this.destination}/${filePath}`)
113
- let content = fs.readFileSync(filePath, 'utf8')
114
- /* eslint-disable-next-line security/detect-non-literal-regexp */
115
- content = content.replace(new RegExp(placeholder, 'g'), replacement)
116
- fs.writeFileSync(filePath, content)
117
- }
118
- public symlink(linkName: string, linkedFile: string) {
119
- linkName = this.stringToPath(linkName)
120
- linkedFile = this.stringToPath(linkedFile)
121
- logger.info(`> ln -s ${linkName} ${linkedFile}`)
122
- try {
123
- fs.symlinkSync(linkedFile, linkName)
124
- } catch (error) {
125
- if ('code' in error && error.code === 'EEXIST') {
126
- // OK
127
- } else {
128
- throw error
129
- }
130
- }
131
- }
132
- }