knex 2.5.0 → 3.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 (190) hide show
  1. package/CHANGELOG.md +78 -59
  2. package/CONTRIBUTING.md +194 -194
  3. package/LICENSE +22 -22
  4. package/README.md +149 -147
  5. package/UPGRADING.md +245 -233
  6. package/bin/cli.js +475 -473
  7. package/bin/utils/cli-config-utils.js +212 -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 -11
  12. package/lib/builder-interface-augmenter.js +120 -120
  13. package/lib/client.js +495 -495
  14. package/lib/constants.js +61 -61
  15. package/lib/dialects/better-sqlite3/index.js +77 -77
  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/mssql/index.js +500 -500
  23. package/lib/dialects/mssql/mssql-formatter.js +34 -34
  24. package/lib/dialects/mssql/query/mssql-querycompiler.js +601 -601
  25. package/lib/dialects/mssql/schema/mssql-columncompiler.js +185 -185
  26. package/lib/dialects/mssql/schema/mssql-compiler.js +91 -91
  27. package/lib/dialects/mssql/schema/mssql-tablecompiler.js +378 -378
  28. package/lib/dialects/mssql/schema/mssql-viewcompiler.js +55 -55
  29. package/lib/dialects/mssql/transaction.js +176 -176
  30. package/lib/dialects/mysql/index.js +201 -201
  31. package/lib/dialects/mysql/query/mysql-querycompiler.js +274 -274
  32. package/lib/dialects/mysql/schema/mysql-columncompiler.js +193 -193
  33. package/lib/dialects/mysql/schema/mysql-compiler.js +60 -60
  34. package/lib/dialects/mysql/schema/mysql-tablecompiler.js +381 -381
  35. package/lib/dialects/mysql/schema/mysql-viewbuilder.js +21 -21
  36. package/lib/dialects/mysql/schema/mysql-viewcompiler.js +15 -15
  37. package/lib/dialects/mysql/transaction.js +46 -46
  38. package/lib/dialects/mysql2/index.js +53 -53
  39. package/lib/dialects/mysql2/transaction.js +44 -44
  40. package/lib/dialects/oracle/DEAD_CODE.md +5 -5
  41. package/lib/dialects/oracle/index.js +92 -92
  42. package/lib/dialects/oracle/query/oracle-querycompiler.js +343 -343
  43. package/lib/dialects/oracle/schema/internal/incrementUtils.js +20 -20
  44. package/lib/dialects/oracle/schema/internal/trigger.js +135 -135
  45. package/lib/dialects/oracle/schema/oracle-columnbuilder.js +17 -17
  46. package/lib/dialects/oracle/schema/oracle-columncompiler.js +126 -126
  47. package/lib/dialects/oracle/schema/oracle-compiler.js +122 -122
  48. package/lib/dialects/oracle/schema/oracle-tablecompiler.js +190 -190
  49. package/lib/dialects/oracle/utils.js +87 -87
  50. package/lib/dialects/oracledb/index.js +327 -327
  51. package/lib/dialects/oracledb/query/oracledb-querycompiler.js +481 -481
  52. package/lib/dialects/oracledb/schema/oracledb-columncompiler.js +61 -61
  53. package/lib/dialects/oracledb/schema/oracledb-tablecompiler.js +19 -19
  54. package/lib/dialects/oracledb/schema/oracledb-viewbuilder.js +13 -13
  55. package/lib/dialects/oracledb/schema/oracledb-viewcompiler.js +19 -19
  56. package/lib/dialects/oracledb/transaction.js +98 -98
  57. package/lib/dialects/oracledb/utils.js +208 -208
  58. package/lib/dialects/pgnative/index.js +60 -60
  59. package/lib/dialects/postgres/execution/pg-transaction.js +19 -19
  60. package/lib/dialects/postgres/index.js +358 -358
  61. package/lib/dialects/postgres/query/pg-querybuilder.js +43 -43
  62. package/lib/dialects/postgres/query/pg-querycompiler.js +400 -400
  63. package/lib/dialects/postgres/schema/pg-columncompiler.js +156 -156
  64. package/lib/dialects/postgres/schema/pg-compiler.js +138 -138
  65. package/lib/dialects/postgres/schema/pg-tablecompiler.js +304 -304
  66. package/lib/dialects/postgres/schema/pg-viewbuilder.js +21 -21
  67. package/lib/dialects/postgres/schema/pg-viewcompiler.js +35 -35
  68. package/lib/dialects/redshift/index.js +86 -86
  69. package/lib/dialects/redshift/query/redshift-querycompiler.js +163 -163
  70. package/lib/dialects/redshift/schema/redshift-columnbuilder.js +22 -22
  71. package/lib/dialects/redshift/schema/redshift-columncompiler.js +67 -67
  72. package/lib/dialects/redshift/schema/redshift-compiler.js +14 -14
  73. package/lib/dialects/redshift/schema/redshift-tablecompiler.js +122 -122
  74. package/lib/dialects/redshift/schema/redshift-viewcompiler.js +11 -11
  75. package/lib/dialects/redshift/transaction.js +32 -32
  76. package/lib/dialects/sqlite3/execution/sqlite-transaction.js +25 -25
  77. package/lib/dialects/sqlite3/index.js +250 -250
  78. package/lib/dialects/sqlite3/query/sqlite-querybuilder.js +33 -33
  79. package/lib/dialects/sqlite3/query/sqlite-querycompiler.js +334 -334
  80. package/lib/dialects/sqlite3/schema/ddl.js +400 -400
  81. package/lib/dialects/sqlite3/schema/internal/compiler.js +327 -327
  82. package/lib/dialects/sqlite3/schema/internal/parser-combinator.js +161 -161
  83. package/lib/dialects/sqlite3/schema/internal/parser.js +638 -638
  84. package/lib/dialects/sqlite3/schema/internal/sqlite-ddl-operations.js +41 -41
  85. package/lib/dialects/sqlite3/schema/internal/tokenizer.js +38 -38
  86. package/lib/dialects/sqlite3/schema/internal/utils.js +12 -12
  87. package/lib/dialects/sqlite3/schema/sqlite-columncompiler.js +50 -50
  88. package/lib/dialects/sqlite3/schema/sqlite-compiler.js +80 -80
  89. package/lib/dialects/sqlite3/schema/sqlite-tablecompiler.js +347 -347
  90. package/lib/dialects/sqlite3/schema/sqlite-viewcompiler.js +40 -40
  91. package/lib/execution/batch-insert.js +51 -51
  92. package/lib/execution/internal/delay.js +6 -6
  93. package/lib/execution/internal/ensure-connection-callback.js +41 -41
  94. package/lib/execution/internal/query-executioner.js +62 -62
  95. package/lib/execution/runner.js +325 -325
  96. package/lib/execution/transaction.js +409 -409
  97. package/lib/formatter/formatterUtils.js +42 -42
  98. package/lib/formatter/rawFormatter.js +84 -84
  99. package/lib/formatter/wrappingFormatter.js +250 -250
  100. package/lib/formatter.js +25 -25
  101. package/lib/index.js +3 -3
  102. package/lib/knex-builder/FunctionHelper.js +80 -80
  103. package/lib/knex-builder/Knex.js +59 -59
  104. package/lib/knex-builder/internal/config-resolver.js +57 -57
  105. package/lib/knex-builder/internal/parse-connection.js +87 -87
  106. package/lib/knex-builder/make-knex.js +345 -345
  107. package/lib/logger.js +76 -76
  108. package/lib/migrations/common/MigrationsLoader.js +36 -36
  109. package/lib/migrations/migrate/MigrationGenerator.js +84 -84
  110. package/lib/migrations/migrate/Migrator.js +599 -598
  111. package/lib/migrations/migrate/migrate-stub.js +17 -17
  112. package/lib/migrations/migrate/migration-list-resolver.js +33 -33
  113. package/lib/migrations/migrate/migrator-configuration-merger.js +58 -58
  114. package/lib/migrations/migrate/sources/fs-migrations.js +74 -74
  115. package/lib/migrations/migrate/stub/cjs.stub +15 -15
  116. package/lib/migrations/migrate/stub/coffee.stub +13 -13
  117. package/lib/migrations/migrate/stub/eg.stub +14 -14
  118. package/lib/migrations/migrate/stub/js-schema.stub +22 -22
  119. package/lib/migrations/migrate/stub/js.stub +22 -22
  120. package/lib/migrations/migrate/stub/knexfile-coffee.stub +34 -34
  121. package/lib/migrations/migrate/stub/knexfile-eg.stub +43 -43
  122. package/lib/migrations/migrate/stub/knexfile-js.stub +47 -47
  123. package/lib/migrations/migrate/stub/knexfile-ls.stub +35 -35
  124. package/lib/migrations/migrate/stub/knexfile-ts.stub +47 -47
  125. package/lib/migrations/migrate/stub/ls.stub +14 -14
  126. package/lib/migrations/migrate/stub/mjs.stub +23 -23
  127. package/lib/migrations/migrate/stub/ts-schema.stub +21 -21
  128. package/lib/migrations/migrate/stub/ts.stub +21 -21
  129. package/lib/migrations/migrate/table-creator.js +77 -77
  130. package/lib/migrations/migrate/table-resolver.js +27 -27
  131. package/lib/migrations/seed/Seeder.js +137 -137
  132. package/lib/migrations/seed/seed-stub.js +13 -13
  133. package/lib/migrations/seed/seeder-configuration-merger.js +60 -60
  134. package/lib/migrations/seed/sources/fs-seeds.js +65 -65
  135. package/lib/migrations/seed/stub/coffee.stub +9 -9
  136. package/lib/migrations/seed/stub/eg.stub +11 -11
  137. package/lib/migrations/seed/stub/js.stub +13 -13
  138. package/lib/migrations/seed/stub/ls.stub +11 -11
  139. package/lib/migrations/seed/stub/mjs.stub +12 -12
  140. package/lib/migrations/seed/stub/ts.stub +13 -13
  141. package/lib/migrations/util/fs.js +86 -86
  142. package/lib/migrations/util/import-file.js +12 -12
  143. package/lib/migrations/util/is-module-type.js +9 -9
  144. package/lib/migrations/util/template.js +52 -52
  145. package/lib/migrations/util/timestamp.js +14 -14
  146. package/lib/query/analytic.js +52 -52
  147. package/lib/query/constants.js +15 -15
  148. package/lib/query/joinclause.js +270 -270
  149. package/lib/query/method-constants.js +136 -136
  150. package/lib/query/querybuilder.js +1793 -1793
  151. package/lib/query/querycompiler.js +1591 -1591
  152. package/lib/raw.js +139 -139
  153. package/lib/ref.js +39 -39
  154. package/lib/schema/builder.js +115 -115
  155. package/lib/schema/columnbuilder.js +146 -146
  156. package/lib/schema/columncompiler.js +307 -307
  157. package/lib/schema/compiler.js +187 -187
  158. package/lib/schema/internal/helpers.js +55 -55
  159. package/lib/schema/tablebuilder.js +376 -376
  160. package/lib/schema/tablecompiler.js +433 -433
  161. package/lib/schema/viewbuilder.js +92 -92
  162. package/lib/schema/viewcompiler.js +138 -138
  163. package/lib/util/finally-mixin.js +13 -13
  164. package/lib/util/helpers.js +95 -95
  165. package/lib/util/is.js +32 -32
  166. package/lib/util/nanoid.js +40 -40
  167. package/lib/util/noop.js +1 -1
  168. package/lib/util/save-async-stack.js +14 -14
  169. package/lib/util/security.js +26 -26
  170. package/lib/util/string.js +190 -190
  171. package/lib/util/timeout.js +29 -29
  172. package/package.json +13 -12
  173. package/scripts/build.js +125 -125
  174. package/scripts/clean.js +31 -31
  175. package/scripts/docker-compose.yml +152 -152
  176. package/scripts/next-release-howto.md +24 -24
  177. package/scripts/oracledb-install-driver-libs.sh +82 -82
  178. package/scripts/release.sh +36 -34
  179. package/scripts/runkit-example.js +35 -34
  180. package/scripts/stress-test/README.txt +18 -18
  181. package/scripts/stress-test/docker-compose.yml +57 -57
  182. package/scripts/stress-test/knex-stress-test.js +212 -208
  183. package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +149 -145
  184. package/scripts/stress-test/mysql2-sudden-exit-without-error.js +101 -100
  185. package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +188 -184
  186. package/scripts/update_gitignore_for_tsc_output.js +90 -90
  187. package/types/index.d.ts +3272 -3273
  188. package/types/result.d.ts +27 -27
  189. package/types/tables.d.ts +4 -4
  190. package/lib/dialects/index.js +0 -34
package/package.json CHANGED
@@ -1,25 +1,27 @@
1
1
  {
2
2
  "name": "knex",
3
- "version": "2.5.0",
3
+ "version": "3.0.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",
7
7
  "engines": {
8
- "node": ">=12"
8
+ "node": ">=16"
9
9
  },
10
10
  "scripts": {
11
- "build": "npm run build:gitignore && npm run build:ts",
11
+ "build": "npm run build:gitignore && npm run build:ts && npm run format",
12
12
  "clean": "node scripts/clean.js",
13
13
  "build:ts": "tsc",
14
14
  "build:gitignore": "node scripts/update_gitignore_for_tsc_output.js run",
15
- "format": "prettier --write \"{lib,bin,scripts,test}/**/*.js\"",
16
- "format:check-difference": "prettier --list-different \"{lib,bin,scripts,test}/**/*.js\"",
15
+ "format": "prettier --write --list-different .",
16
+ "format:check": "prettier --list-different .",
17
17
  "debug:test": "mocha --inspect-brk --exit -t 0 test/all-tests-suite.js",
18
18
  "debug:tape": "node --inspect-brk test/tape/index.js",
19
19
  "coveralls": "nyc report --reporter=lcov",
20
- "lint": "eslint \"lib/**/*.js\" \"test/**/*.js\" \"bin/**/*.js\"",
20
+ "lint": "eslint --cache **/*.js",
21
+ "lint:fix": "eslint --cache --fix '**/*.js'",
21
22
  "lint:types": "tsd && dtslint types",
22
- "lint:everything": "npm run lint:types && npm run lint",
23
+ "lint:everything": "npm run lint && npm run lint:types",
24
+ "lint:fix:everything": "npm run lint:fix && npm run lint:types",
23
25
  "test:unit": "npm run test:unit-only && npm run test:cli",
24
26
  "test:unit-only": "mocha --exit -t 10000 --config test/mocha-unit-config-test.js",
25
27
  "test:db": "mocha --exit -t 10000 --config test/mocha-integration-config-test.js",
@@ -58,7 +60,7 @@
58
60
  "stress:test": "node scripts/stress-test/knex-stress-test.js | grep -A 5 -B 60 -- '- STATS '",
59
61
  "stress:destroy": "docker-compose -f scripts/stress-test/docker-compose.yml stop",
60
62
  "prepare": "husky install && npm run clean && npm run build",
61
- "prepublishOnly": "npm run clean && npm run build"
63
+ "prepublishOnly": "npm run format:check && npm run lint:everything && npm run clean && npm run build"
62
64
  },
63
65
  "dependencies": {
64
66
  "colorette": "2.0.19",
@@ -100,9 +102,8 @@
100
102
  }
101
103
  },
102
104
  "lint-staged": {
103
- "*.{js,json}": [
104
- "prettier --write"
105
- ]
105
+ "*": "prettier --ignore-unknown --write",
106
+ "*.js": "eslint --cache --fix"
106
107
  },
107
108
  "devDependencies": {
108
109
  "@tsconfig/recommended": "^1.0.1",
@@ -129,7 +130,7 @@
129
130
  "mysql": "^2.18.1",
130
131
  "mysql2": "^3.2.0",
131
132
  "nyc": "^15.1.0",
132
- "oracledb": "^5.4.0",
133
+ "oracledb": "^6.1.0",
133
134
  "pg": "^8.8.0",
134
135
  "pg-query-stream": "^4.2.4",
135
136
  "prettier": "2.8.7",
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();