knex 2.4.2 → 2.5.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 (190) hide show
  1. package/CHANGELOG.md +54 -18
  2. package/CONTRIBUTING.md +194 -194
  3. package/LICENSE +22 -22
  4. package/README.md +147 -148
  5. package/UPGRADING.md +233 -233
  6. package/bin/cli.js +473 -473
  7. package/bin/utils/cli-config-utils.js +210 -210
  8. package/bin/utils/constants.js +7 -7
  9. package/bin/utils/migrationsLister.js +37 -37
  10. package/knex.js +23 -23
  11. package/knex.mjs +11 -0
  12. package/lib/builder-interface-augmenter.js +120 -120
  13. package/lib/client.js +495 -475
  14. package/lib/constants.js +61 -61
  15. package/lib/dialects/better-sqlite3/index.js +77 -72
  16. package/lib/dialects/cockroachdb/crdb-columncompiler.js +14 -14
  17. package/lib/dialects/cockroachdb/crdb-querybuilder.js +11 -11
  18. package/lib/dialects/cockroachdb/crdb-querycompiler.js +122 -122
  19. package/lib/dialects/cockroachdb/crdb-tablecompiler.js +37 -37
  20. package/lib/dialects/cockroachdb/crdb-viewcompiler.js +15 -15
  21. package/lib/dialects/cockroachdb/index.js +86 -86
  22. package/lib/dialects/index.js +33 -33
  23. package/lib/dialects/mssql/index.js +500 -495
  24. package/lib/dialects/mssql/mssql-formatter.js +34 -34
  25. package/lib/dialects/mssql/query/mssql-querycompiler.js +601 -600
  26. package/lib/dialects/mssql/schema/mssql-columncompiler.js +185 -185
  27. package/lib/dialects/mssql/schema/mssql-compiler.js +91 -91
  28. package/lib/dialects/mssql/schema/mssql-tablecompiler.js +378 -378
  29. package/lib/dialects/mssql/schema/mssql-viewcompiler.js +55 -55
  30. package/lib/dialects/mssql/transaction.js +176 -176
  31. package/lib/dialects/mysql/index.js +201 -201
  32. package/lib/dialects/mysql/query/mysql-querycompiler.js +274 -274
  33. package/lib/dialects/mysql/schema/mysql-columncompiler.js +193 -193
  34. package/lib/dialects/mysql/schema/mysql-compiler.js +60 -60
  35. package/lib/dialects/mysql/schema/mysql-tablecompiler.js +381 -381
  36. package/lib/dialects/mysql/schema/mysql-viewbuilder.js +21 -21
  37. package/lib/dialects/mysql/schema/mysql-viewcompiler.js +15 -15
  38. package/lib/dialects/mysql/transaction.js +46 -46
  39. package/lib/dialects/mysql2/index.js +53 -33
  40. package/lib/dialects/mysql2/transaction.js +44 -44
  41. package/lib/dialects/oracle/DEAD_CODE.md +5 -5
  42. package/lib/dialects/oracle/index.js +92 -92
  43. package/lib/dialects/oracle/query/oracle-querycompiler.js +343 -342
  44. package/lib/dialects/oracle/schema/internal/incrementUtils.js +20 -20
  45. package/lib/dialects/oracle/schema/internal/trigger.js +135 -135
  46. package/lib/dialects/oracle/schema/oracle-columnbuilder.js +17 -17
  47. package/lib/dialects/oracle/schema/oracle-columncompiler.js +126 -126
  48. package/lib/dialects/oracle/schema/oracle-compiler.js +122 -122
  49. package/lib/dialects/oracle/schema/oracle-tablecompiler.js +190 -190
  50. package/lib/dialects/oracle/utils.js +87 -87
  51. package/lib/dialects/oracledb/index.js +327 -327
  52. package/lib/dialects/oracledb/query/oracledb-querycompiler.js +481 -481
  53. package/lib/dialects/oracledb/schema/oracledb-columncompiler.js +61 -55
  54. package/lib/dialects/oracledb/schema/oracledb-tablecompiler.js +19 -19
  55. package/lib/dialects/oracledb/schema/oracledb-viewbuilder.js +13 -13
  56. package/lib/dialects/oracledb/schema/oracledb-viewcompiler.js +19 -19
  57. package/lib/dialects/oracledb/transaction.js +98 -98
  58. package/lib/dialects/oracledb/utils.js +208 -208
  59. package/lib/dialects/pgnative/index.js +60 -60
  60. package/lib/dialects/postgres/execution/pg-transaction.js +19 -12
  61. package/lib/dialects/postgres/index.js +358 -358
  62. package/lib/dialects/postgres/query/pg-querybuilder.js +43 -38
  63. package/lib/dialects/postgres/query/pg-querycompiler.js +400 -395
  64. package/lib/dialects/postgres/schema/pg-columncompiler.js +156 -156
  65. package/lib/dialects/postgres/schema/pg-compiler.js +138 -138
  66. package/lib/dialects/postgres/schema/pg-tablecompiler.js +304 -299
  67. package/lib/dialects/postgres/schema/pg-viewbuilder.js +21 -21
  68. package/lib/dialects/postgres/schema/pg-viewcompiler.js +35 -35
  69. package/lib/dialects/redshift/index.js +86 -86
  70. package/lib/dialects/redshift/query/redshift-querycompiler.js +163 -163
  71. package/lib/dialects/redshift/schema/redshift-columnbuilder.js +22 -22
  72. package/lib/dialects/redshift/schema/redshift-columncompiler.js +67 -67
  73. package/lib/dialects/redshift/schema/redshift-compiler.js +14 -14
  74. package/lib/dialects/redshift/schema/redshift-tablecompiler.js +122 -122
  75. package/lib/dialects/redshift/schema/redshift-viewcompiler.js +11 -11
  76. package/lib/dialects/redshift/transaction.js +32 -25
  77. package/lib/dialects/sqlite3/execution/sqlite-transaction.js +25 -18
  78. package/lib/dialects/sqlite3/index.js +250 -250
  79. package/lib/dialects/sqlite3/query/sqlite-querybuilder.js +33 -33
  80. package/lib/dialects/sqlite3/query/sqlite-querycompiler.js +334 -334
  81. package/lib/dialects/sqlite3/schema/ddl.js +400 -400
  82. package/lib/dialects/sqlite3/schema/internal/compiler.js +327 -327
  83. package/lib/dialects/sqlite3/schema/internal/parser-combinator.js +161 -161
  84. package/lib/dialects/sqlite3/schema/internal/parser.js +638 -638
  85. package/lib/dialects/sqlite3/schema/internal/sqlite-ddl-operations.js +41 -41
  86. package/lib/dialects/sqlite3/schema/internal/tokenizer.js +38 -38
  87. package/lib/dialects/sqlite3/schema/internal/utils.js +12 -12
  88. package/lib/dialects/sqlite3/schema/sqlite-columncompiler.js +50 -50
  89. package/lib/dialects/sqlite3/schema/sqlite-compiler.js +80 -80
  90. package/lib/dialects/sqlite3/schema/sqlite-tablecompiler.js +347 -347
  91. package/lib/dialects/sqlite3/schema/sqlite-viewcompiler.js +40 -40
  92. package/lib/execution/batch-insert.js +51 -51
  93. package/lib/execution/internal/delay.js +6 -6
  94. package/lib/execution/internal/ensure-connection-callback.js +41 -41
  95. package/lib/execution/internal/query-executioner.js +62 -62
  96. package/lib/execution/runner.js +325 -307
  97. package/lib/execution/transaction.js +409 -401
  98. package/lib/formatter/formatterUtils.js +42 -42
  99. package/lib/formatter/rawFormatter.js +84 -84
  100. package/lib/formatter/wrappingFormatter.js +250 -250
  101. package/lib/formatter.js +25 -25
  102. package/lib/index.js +3 -3
  103. package/lib/knex-builder/FunctionHelper.js +80 -54
  104. package/lib/knex-builder/Knex.js +59 -59
  105. package/lib/knex-builder/internal/config-resolver.js +57 -57
  106. package/lib/knex-builder/internal/parse-connection.js +87 -87
  107. package/lib/knex-builder/make-knex.js +345 -340
  108. package/lib/logger.js +76 -76
  109. package/lib/migrations/common/MigrationsLoader.js +36 -36
  110. package/lib/migrations/migrate/MigrationGenerator.js +84 -84
  111. package/lib/migrations/migrate/Migrator.js +598 -598
  112. package/lib/migrations/migrate/migrate-stub.js +17 -17
  113. package/lib/migrations/migrate/migration-list-resolver.js +33 -33
  114. package/lib/migrations/migrate/migrator-configuration-merger.js +58 -58
  115. package/lib/migrations/migrate/sources/fs-migrations.js +74 -74
  116. package/lib/migrations/migrate/stub/cjs.stub +15 -15
  117. package/lib/migrations/migrate/stub/coffee.stub +13 -13
  118. package/lib/migrations/migrate/stub/eg.stub +14 -14
  119. package/lib/migrations/migrate/stub/js-schema.stub +22 -22
  120. package/lib/migrations/migrate/stub/js.stub +22 -22
  121. package/lib/migrations/migrate/stub/knexfile-coffee.stub +34 -34
  122. package/lib/migrations/migrate/stub/knexfile-eg.stub +43 -43
  123. package/lib/migrations/migrate/stub/knexfile-js.stub +47 -47
  124. package/lib/migrations/migrate/stub/knexfile-ls.stub +35 -35
  125. package/lib/migrations/migrate/stub/knexfile-ts.stub +47 -47
  126. package/lib/migrations/migrate/stub/ls.stub +14 -14
  127. package/lib/migrations/migrate/stub/mjs.stub +23 -23
  128. package/lib/migrations/migrate/stub/ts-schema.stub +21 -21
  129. package/lib/migrations/migrate/stub/ts.stub +21 -21
  130. package/lib/migrations/migrate/table-creator.js +77 -77
  131. package/lib/migrations/migrate/table-resolver.js +27 -27
  132. package/lib/migrations/seed/Seeder.js +137 -137
  133. package/lib/migrations/seed/seed-stub.js +13 -13
  134. package/lib/migrations/seed/seeder-configuration-merger.js +60 -60
  135. package/lib/migrations/seed/sources/fs-seeds.js +65 -65
  136. package/lib/migrations/seed/stub/coffee.stub +9 -9
  137. package/lib/migrations/seed/stub/eg.stub +11 -11
  138. package/lib/migrations/seed/stub/js.stub +13 -13
  139. package/lib/migrations/seed/stub/ls.stub +11 -11
  140. package/lib/migrations/seed/stub/mjs.stub +12 -12
  141. package/lib/migrations/seed/stub/ts.stub +13 -13
  142. package/lib/migrations/util/fs.js +86 -86
  143. package/lib/migrations/util/import-file.js +12 -12
  144. package/lib/migrations/util/is-module-type.js +9 -9
  145. package/lib/migrations/util/template.js +52 -52
  146. package/lib/migrations/util/timestamp.js +14 -14
  147. package/lib/query/analytic.js +52 -52
  148. package/lib/query/constants.js +15 -15
  149. package/lib/query/joinclause.js +270 -270
  150. package/lib/query/method-constants.js +136 -135
  151. package/lib/query/querybuilder.js +1793 -1794
  152. package/lib/query/querycompiler.js +1591 -1580
  153. package/lib/raw.js +139 -139
  154. package/lib/ref.js +39 -39
  155. package/lib/schema/builder.js +115 -115
  156. package/lib/schema/columnbuilder.js +146 -146
  157. package/lib/schema/columncompiler.js +307 -307
  158. package/lib/schema/compiler.js +187 -187
  159. package/lib/schema/internal/helpers.js +55 -55
  160. package/lib/schema/tablebuilder.js +376 -376
  161. package/lib/schema/tablecompiler.js +433 -433
  162. package/lib/schema/viewbuilder.js +92 -92
  163. package/lib/schema/viewcompiler.js +138 -138
  164. package/lib/util/finally-mixin.js +13 -13
  165. package/lib/util/helpers.js +95 -95
  166. package/lib/util/is.js +32 -32
  167. package/lib/util/nanoid.js +40 -40
  168. package/lib/util/noop.js +1 -1
  169. package/lib/util/save-async-stack.js +14 -14
  170. package/lib/util/security.js +26 -0
  171. package/lib/util/string.js +190 -190
  172. package/lib/util/timeout.js +29 -29
  173. package/package.json +12 -10
  174. package/scripts/build.js +125 -125
  175. package/scripts/clean.js +31 -31
  176. package/scripts/docker-compose.yml +152 -152
  177. package/scripts/next-release-howto.md +24 -24
  178. package/scripts/oracledb-install-driver-libs.sh +82 -82
  179. package/scripts/release.sh +34 -34
  180. package/scripts/runkit-example.js +34 -34
  181. package/scripts/stress-test/README.txt +18 -18
  182. package/scripts/stress-test/docker-compose.yml +57 -57
  183. package/scripts/stress-test/knex-stress-test.js +208 -208
  184. package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +145 -145
  185. package/scripts/stress-test/mysql2-sudden-exit-without-error.js +100 -100
  186. package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +184 -184
  187. package/scripts/update_gitignore_for_tsc_output.js +90 -90
  188. package/types/index.d.ts +3273 -3233
  189. package/types/result.d.ts +27 -27
  190. package/types/tables.d.ts +4 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "knex",
3
- "version": "2.4.2",
3
+ "version": "2.5.0",
4
4
  "description": "A batteries-included SQL query & schema builder for PostgresSQL, MySQL, CockroachDB, MSSQL and SQLite3",
5
5
  "main": "knex",
6
6
  "types": "types/index.d.ts",
@@ -58,11 +58,11 @@
58
58
  "stress:test": "node scripts/stress-test/knex-stress-test.js | grep -A 5 -B 60 -- '- STATS '",
59
59
  "stress:destroy": "docker-compose -f scripts/stress-test/docker-compose.yml stop",
60
60
  "prepare": "husky install && npm run clean && npm run build",
61
- "prepublishOnly": "npm run format:check-difference && npm run lint && npm run clean && npm run build"
61
+ "prepublishOnly": "npm run clean && npm run build"
62
62
  },
63
63
  "dependencies": {
64
64
  "colorette": "2.0.19",
65
- "commander": "^9.1.0",
65
+ "commander": "^10.0.0",
66
66
  "debug": "4.3.4",
67
67
  "escalade": "^3.1.1",
68
68
  "esm": "^3.2.25",
@@ -70,7 +70,7 @@
70
70
  "getopts": "2.3.0",
71
71
  "interpret": "^2.2.0",
72
72
  "lodash": "^4.17.21",
73
- "pg-connection-string": "2.5.0",
73
+ "pg-connection-string": "2.6.1",
74
74
  "rechoir": "^0.8.0",
75
75
  "resolve-from": "^5.0.0",
76
76
  "tarn": "^3.0.2",
@@ -106,7 +106,7 @@
106
106
  },
107
107
  "devDependencies": {
108
108
  "@tsconfig/recommended": "^1.0.1",
109
- "@types/node": "^18.7.14",
109
+ "@types/node": "^20.4.0",
110
110
  "better-sqlite3": "^7.6.2",
111
111
  "chai": "^4.3.6",
112
112
  "chai-as-promised": "^7.1.1",
@@ -127,12 +127,12 @@
127
127
  "mocha": "^10.0.0",
128
128
  "mock-fs": "^5.1.4",
129
129
  "mysql": "^2.18.1",
130
- "mysql2": "^2.3.3",
130
+ "mysql2": "^3.2.0",
131
131
  "nyc": "^15.1.0",
132
132
  "oracledb": "^5.4.0",
133
133
  "pg": "^8.8.0",
134
134
  "pg-query-stream": "^4.2.4",
135
- "prettier": "2.8.3",
135
+ "prettier": "2.8.7",
136
136
  "rimraf": "^3.0.2",
137
137
  "sinon": "^15.0.1",
138
138
  "sinon-chai": "^3.7.0",
@@ -143,8 +143,8 @@
143
143
  "tedious": "^14.4.0",
144
144
  "toxiproxy-node-client": "^2.0.6",
145
145
  "ts-node": "^10.9.1",
146
- "tsd": "^0.25.0",
147
- "typescript": "4.8.3"
146
+ "tsd": "^0.28.1",
147
+ "typescript": "5.0.4"
148
148
  },
149
149
  "buildDependencies": [
150
150
  "rimraf"
@@ -234,6 +234,7 @@
234
234
  "CHANGELOG.md",
235
235
  "CONTRIBUTING.md",
236
236
  "knex.js",
237
+ "knex.mjs",
237
238
  "LICENSE",
238
239
  "README.md",
239
240
  "UPGRADING.md"
@@ -251,7 +252,8 @@
251
252
  ],
252
253
  "exclude": [
253
254
  "lib/dialects/oracle",
254
- "lib/dialects/oracledb"
255
+ "lib/dialects/oracledb",
256
+ "test/**/*.spec.js"
255
257
  ]
256
258
  },
257
259
  "tsd": {
package/scripts/build.js CHANGED
@@ -1,125 +1,125 @@
1
- #!/usr/bin/env node
2
- const fs = require('fs');
3
- const path = require('path');
4
- const child_process = require('child_process');
5
- const _ = require('lodash');
6
-
7
- const exec = function (cmd, args) {
8
- return new Promise(function (resolve, reject) {
9
- // Execute command
10
- const child = child_process.exec(cmd, {
11
- cwd: process.cwd(),
12
- env: process.env,
13
- });
14
-
15
- // Pass stdout and stderr
16
- child.stdout.on('data', function (data) {
17
- process.stdout.write(data.toString());
18
- });
19
- child.stderr.on('data', function (data) {
20
- process.stderr.write(data.toString());
21
- });
22
- // Handle result
23
- child.on('exit', function (code) {
24
- if (code) reject(code);
25
- else resolve();
26
- });
27
- child.on('error', reject);
28
- });
29
- };
30
-
31
- const CWD = process.cwd();
32
- const POSTINSTALL_BUILD_CWD = process.env.POSTINSTALL_BUILD_CWD;
33
-
34
- // If we didn't have this check, then we'd be stuck in an infinite `postinstall`
35
- // loop, since we run `npm install --only=dev` below, triggering another
36
- // `postinstall`. We can't use `--ignore-scripts` because that ignores scripts
37
- // on all the modules that get installed, too, which would break stuff. So
38
- // instead, we set an environment variable, `POSTINSTALL_BUILD_CWD`, that keeps
39
- // track of what we're installing. It's more than just a yes/no flag because
40
- // the dev dependencies we're installing might use `postinstall-build` too, and
41
- // we don't want the flag to prevent them from running.
42
- if (POSTINSTALL_BUILD_CWD !== CWD) {
43
- const BUILD_ARTIFACT = process.argv[2];
44
- const BUILD_COMMAND = process.argv[3];
45
-
46
- fs.stat(BUILD_ARTIFACT, function (err, stats) {
47
- if (err || !(stats.isFile() || stats.isDirectory())) {
48
- // This script will run again after we run `npm install` below. Set an
49
- // environment variable to tell it to skip the check. Really we just want
50
- // the execSync's `env` to be modified, but it's easier just modify and
51
- // pass along the entire `process.env`.
52
- process.env.POSTINSTALL_BUILD_CWD = CWD;
53
- // We already have prod dependencies, that's what triggered `postinstall`
54
- // in the first place. So only install dev.
55
-
56
- // Fetch package.json
57
- const pkgJson = require(path.join(CWD, 'package.json'));
58
- const devDeps = pkgJson.devDependencies;
59
- // Values listed under `buildDependencies` contain the dependency names
60
- // that are required for `lib` building.
61
- const buildDependencies = _.pick(devDeps, pkgJson.buildDependencies);
62
-
63
- // Proceed only if there is something to install
64
- if (!_.isEmpty(buildDependencies)) {
65
- const opts = { env: process.env, stdio: 'inherit' };
66
-
67
- console.log('Building Knex.js');
68
-
69
- // Map all key (dependency) value (semver) pairs to
70
- // "dependency@semver dependency@semver ..." string that can be used
71
- // for `npm install` command
72
- const installArgs = _(buildDependencies)
73
- .pickBy(function (semver, dep) {
74
- // Check if the dependency is already installed
75
- try {
76
- require(dep);
77
- return false;
78
- } catch (err) {
79
- return true;
80
- }
81
- })
82
- .map(function (semver, dep) {
83
- // Format installable dependencies
84
- return dep + '@' + semver;
85
- })
86
- .value()
87
- .join(' ');
88
- const needsDepInstallation = !_.isEmpty(installArgs);
89
- const dependenciesInstalledQ = needsDepInstallation
90
- ? exec('npm install ' + installArgs, opts)
91
- : Promise.resolve();
92
- dependenciesInstalledQ
93
- .then(function () {
94
- console.log('✓');
95
- // Don't need the flag anymore as `postinstall` was already run.
96
- // Change it back so the environment is minimally changed for the
97
- // remaining commands.
98
- process.env.POSTINSTALL_BUILD_CWD = POSTINSTALL_BUILD_CWD;
99
- console.log('Building compiled files (' + BUILD_COMMAND + ')');
100
- return exec(BUILD_COMMAND, opts);
101
- })
102
- .catch(function (err) {
103
- console.error(err);
104
- process.exit(1);
105
- })
106
- .then(function () {
107
- if (process.env.NODE_ENV === 'production') {
108
- console.log('✓');
109
- console.log('Pruning dev dependencies for production build');
110
- return exec('npm prune --production', opts);
111
- } else {
112
- console.log('Skipping npm prune');
113
- }
114
- })
115
- .then(function () {
116
- console.log('✓');
117
- })
118
- .catch(function (err) {
119
- console.error(err);
120
- process.exit(1);
121
- });
122
- }
123
- }
124
- });
125
- }
1
+ #!/usr/bin/env node
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+ const child_process = require('child_process');
5
+ const _ = require('lodash');
6
+
7
+ const exec = function (cmd, args) {
8
+ return new Promise(function (resolve, reject) {
9
+ // Execute command
10
+ const child = child_process.exec(cmd, {
11
+ cwd: process.cwd(),
12
+ env: process.env,
13
+ });
14
+
15
+ // Pass stdout and stderr
16
+ child.stdout.on('data', function (data) {
17
+ process.stdout.write(data.toString());
18
+ });
19
+ child.stderr.on('data', function (data) {
20
+ process.stderr.write(data.toString());
21
+ });
22
+ // Handle result
23
+ child.on('exit', function (code) {
24
+ if (code) reject(code);
25
+ else resolve();
26
+ });
27
+ child.on('error', reject);
28
+ });
29
+ };
30
+
31
+ const CWD = process.cwd();
32
+ const POSTINSTALL_BUILD_CWD = process.env.POSTINSTALL_BUILD_CWD;
33
+
34
+ // If we didn't have this check, then we'd be stuck in an infinite `postinstall`
35
+ // loop, since we run `npm install --only=dev` below, triggering another
36
+ // `postinstall`. We can't use `--ignore-scripts` because that ignores scripts
37
+ // on all the modules that get installed, too, which would break stuff. So
38
+ // instead, we set an environment variable, `POSTINSTALL_BUILD_CWD`, that keeps
39
+ // track of what we're installing. It's more than just a yes/no flag because
40
+ // the dev dependencies we're installing might use `postinstall-build` too, and
41
+ // we don't want the flag to prevent them from running.
42
+ if (POSTINSTALL_BUILD_CWD !== CWD) {
43
+ const BUILD_ARTIFACT = process.argv[2];
44
+ const BUILD_COMMAND = process.argv[3];
45
+
46
+ fs.stat(BUILD_ARTIFACT, function (err, stats) {
47
+ if (err || !(stats.isFile() || stats.isDirectory())) {
48
+ // This script will run again after we run `npm install` below. Set an
49
+ // environment variable to tell it to skip the check. Really we just want
50
+ // the execSync's `env` to be modified, but it's easier just modify and
51
+ // pass along the entire `process.env`.
52
+ process.env.POSTINSTALL_BUILD_CWD = CWD;
53
+ // We already have prod dependencies, that's what triggered `postinstall`
54
+ // in the first place. So only install dev.
55
+
56
+ // Fetch package.json
57
+ const pkgJson = require(path.join(CWD, 'package.json'));
58
+ const devDeps = pkgJson.devDependencies;
59
+ // Values listed under `buildDependencies` contain the dependency names
60
+ // that are required for `lib` building.
61
+ const buildDependencies = _.pick(devDeps, pkgJson.buildDependencies);
62
+
63
+ // Proceed only if there is something to install
64
+ if (!_.isEmpty(buildDependencies)) {
65
+ const opts = { env: process.env, stdio: 'inherit' };
66
+
67
+ console.log('Building Knex.js');
68
+
69
+ // Map all key (dependency) value (semver) pairs to
70
+ // "dependency@semver dependency@semver ..." string that can be used
71
+ // for `npm install` command
72
+ const installArgs = _(buildDependencies)
73
+ .pickBy(function (semver, dep) {
74
+ // Check if the dependency is already installed
75
+ try {
76
+ require(dep);
77
+ return false;
78
+ } catch (err) {
79
+ return true;
80
+ }
81
+ })
82
+ .map(function (semver, dep) {
83
+ // Format installable dependencies
84
+ return dep + '@' + semver;
85
+ })
86
+ .value()
87
+ .join(' ');
88
+ const needsDepInstallation = !_.isEmpty(installArgs);
89
+ const dependenciesInstalledQ = needsDepInstallation
90
+ ? exec('npm install ' + installArgs, opts)
91
+ : Promise.resolve();
92
+ dependenciesInstalledQ
93
+ .then(function () {
94
+ console.log('✓');
95
+ // Don't need the flag anymore as `postinstall` was already run.
96
+ // Change it back so the environment is minimally changed for the
97
+ // remaining commands.
98
+ process.env.POSTINSTALL_BUILD_CWD = POSTINSTALL_BUILD_CWD;
99
+ console.log('Building compiled files (' + BUILD_COMMAND + ')');
100
+ return exec(BUILD_COMMAND, opts);
101
+ })
102
+ .catch(function (err) {
103
+ console.error(err);
104
+ process.exit(1);
105
+ })
106
+ .then(function () {
107
+ if (process.env.NODE_ENV === 'production') {
108
+ console.log('✓');
109
+ console.log('Pruning dev dependencies for production build');
110
+ return exec('npm prune --production', opts);
111
+ } else {
112
+ console.log('Skipping npm prune');
113
+ }
114
+ })
115
+ .then(function () {
116
+ console.log('✓');
117
+ })
118
+ .catch(function (err) {
119
+ console.error(err);
120
+ process.exit(1);
121
+ });
122
+ }
123
+ }
124
+ });
125
+ }
package/scripts/clean.js CHANGED
@@ -1,31 +1,31 @@
1
- #!/usr/bin/env node
2
-
3
- const fs = require('fs');
4
- const path = require('path');
5
- const { execSync } = require('child_process');
6
-
7
- function main() {
8
- const repoDir = path.dirname(__dirname);
9
- const gitDir = path.join(repoDir, '.git');
10
- const gitDirExists = doesDirectoryExist(gitDir);
11
- if (!gitDirExists) {
12
- console.log("No .git directory detected so can not clean 'lib/'. Exiting.");
13
- process.exit(0);
14
- }
15
- console.log(
16
- "Cleaning 'lib/' of outputted files from Typescript compilation ..."
17
- );
18
- const cmd = 'git clean -f -X lib/';
19
- const output = execSync(cmd, { cwd: repoDir });
20
- console.log(output.toString('utf8'));
21
- console.log('Done');
22
- }
23
-
24
- function doesDirectoryExist(p) {
25
- if (fs.existsSync(p)) {
26
- return fs.lstatSync(p).isDirectory();
27
- }
28
- return false;
29
- }
30
-
31
- main();
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const { execSync } = require('child_process');
6
+
7
+ function main() {
8
+ const repoDir = path.dirname(__dirname);
9
+ const gitDir = path.join(repoDir, '.git');
10
+ const gitDirExists = doesDirectoryExist(gitDir);
11
+ if (!gitDirExists) {
12
+ console.log("No .git directory detected so can not clean 'lib/'. Exiting.");
13
+ process.exit(0);
14
+ }
15
+ console.log(
16
+ "Cleaning 'lib/' of outputted files from Typescript compilation ..."
17
+ );
18
+ const cmd = 'git clean -f -X lib/';
19
+ const output = execSync(cmd, { cwd: repoDir });
20
+ console.log(output.toString('utf8'));
21
+ console.log('Done');
22
+ }
23
+
24
+ function doesDirectoryExist(p) {
25
+ if (fs.existsSync(p)) {
26
+ return fs.lstatSync(p).isDirectory();
27
+ }
28
+ return false;
29
+ }
30
+
31
+ main();