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.
- package/CHANGELOG.md +54 -18
- package/CONTRIBUTING.md +194 -194
- package/LICENSE +22 -22
- package/README.md +147 -148
- package/UPGRADING.md +233 -233
- package/bin/cli.js +473 -473
- package/bin/utils/cli-config-utils.js +210 -210
- package/bin/utils/constants.js +7 -7
- package/bin/utils/migrationsLister.js +37 -37
- package/knex.js +23 -23
- package/knex.mjs +11 -0
- package/lib/builder-interface-augmenter.js +120 -120
- package/lib/client.js +495 -475
- package/lib/constants.js +61 -61
- package/lib/dialects/better-sqlite3/index.js +77 -72
- package/lib/dialects/cockroachdb/crdb-columncompiler.js +14 -14
- package/lib/dialects/cockroachdb/crdb-querybuilder.js +11 -11
- package/lib/dialects/cockroachdb/crdb-querycompiler.js +122 -122
- package/lib/dialects/cockroachdb/crdb-tablecompiler.js +37 -37
- package/lib/dialects/cockroachdb/crdb-viewcompiler.js +15 -15
- package/lib/dialects/cockroachdb/index.js +86 -86
- package/lib/dialects/index.js +33 -33
- package/lib/dialects/mssql/index.js +500 -495
- package/lib/dialects/mssql/mssql-formatter.js +34 -34
- package/lib/dialects/mssql/query/mssql-querycompiler.js +601 -600
- package/lib/dialects/mssql/schema/mssql-columncompiler.js +185 -185
- package/lib/dialects/mssql/schema/mssql-compiler.js +91 -91
- package/lib/dialects/mssql/schema/mssql-tablecompiler.js +378 -378
- package/lib/dialects/mssql/schema/mssql-viewcompiler.js +55 -55
- package/lib/dialects/mssql/transaction.js +176 -176
- package/lib/dialects/mysql/index.js +201 -201
- package/lib/dialects/mysql/query/mysql-querycompiler.js +274 -274
- package/lib/dialects/mysql/schema/mysql-columncompiler.js +193 -193
- package/lib/dialects/mysql/schema/mysql-compiler.js +60 -60
- package/lib/dialects/mysql/schema/mysql-tablecompiler.js +381 -381
- package/lib/dialects/mysql/schema/mysql-viewbuilder.js +21 -21
- package/lib/dialects/mysql/schema/mysql-viewcompiler.js +15 -15
- package/lib/dialects/mysql/transaction.js +46 -46
- package/lib/dialects/mysql2/index.js +53 -33
- package/lib/dialects/mysql2/transaction.js +44 -44
- package/lib/dialects/oracle/DEAD_CODE.md +5 -5
- package/lib/dialects/oracle/index.js +92 -92
- package/lib/dialects/oracle/query/oracle-querycompiler.js +343 -342
- package/lib/dialects/oracle/schema/internal/incrementUtils.js +20 -20
- package/lib/dialects/oracle/schema/internal/trigger.js +135 -135
- package/lib/dialects/oracle/schema/oracle-columnbuilder.js +17 -17
- package/lib/dialects/oracle/schema/oracle-columncompiler.js +126 -126
- package/lib/dialects/oracle/schema/oracle-compiler.js +122 -122
- package/lib/dialects/oracle/schema/oracle-tablecompiler.js +190 -190
- package/lib/dialects/oracle/utils.js +87 -87
- package/lib/dialects/oracledb/index.js +327 -327
- package/lib/dialects/oracledb/query/oracledb-querycompiler.js +481 -481
- package/lib/dialects/oracledb/schema/oracledb-columncompiler.js +61 -55
- package/lib/dialects/oracledb/schema/oracledb-tablecompiler.js +19 -19
- package/lib/dialects/oracledb/schema/oracledb-viewbuilder.js +13 -13
- package/lib/dialects/oracledb/schema/oracledb-viewcompiler.js +19 -19
- package/lib/dialects/oracledb/transaction.js +98 -98
- package/lib/dialects/oracledb/utils.js +208 -208
- package/lib/dialects/pgnative/index.js +60 -60
- package/lib/dialects/postgres/execution/pg-transaction.js +19 -12
- package/lib/dialects/postgres/index.js +358 -358
- package/lib/dialects/postgres/query/pg-querybuilder.js +43 -38
- package/lib/dialects/postgres/query/pg-querycompiler.js +400 -395
- package/lib/dialects/postgres/schema/pg-columncompiler.js +156 -156
- package/lib/dialects/postgres/schema/pg-compiler.js +138 -138
- package/lib/dialects/postgres/schema/pg-tablecompiler.js +304 -299
- package/lib/dialects/postgres/schema/pg-viewbuilder.js +21 -21
- package/lib/dialects/postgres/schema/pg-viewcompiler.js +35 -35
- package/lib/dialects/redshift/index.js +86 -86
- package/lib/dialects/redshift/query/redshift-querycompiler.js +163 -163
- package/lib/dialects/redshift/schema/redshift-columnbuilder.js +22 -22
- package/lib/dialects/redshift/schema/redshift-columncompiler.js +67 -67
- package/lib/dialects/redshift/schema/redshift-compiler.js +14 -14
- package/lib/dialects/redshift/schema/redshift-tablecompiler.js +122 -122
- package/lib/dialects/redshift/schema/redshift-viewcompiler.js +11 -11
- package/lib/dialects/redshift/transaction.js +32 -25
- package/lib/dialects/sqlite3/execution/sqlite-transaction.js +25 -18
- package/lib/dialects/sqlite3/index.js +250 -250
- package/lib/dialects/sqlite3/query/sqlite-querybuilder.js +33 -33
- package/lib/dialects/sqlite3/query/sqlite-querycompiler.js +334 -334
- package/lib/dialects/sqlite3/schema/ddl.js +400 -400
- package/lib/dialects/sqlite3/schema/internal/compiler.js +327 -327
- package/lib/dialects/sqlite3/schema/internal/parser-combinator.js +161 -161
- package/lib/dialects/sqlite3/schema/internal/parser.js +638 -638
- package/lib/dialects/sqlite3/schema/internal/sqlite-ddl-operations.js +41 -41
- package/lib/dialects/sqlite3/schema/internal/tokenizer.js +38 -38
- package/lib/dialects/sqlite3/schema/internal/utils.js +12 -12
- package/lib/dialects/sqlite3/schema/sqlite-columncompiler.js +50 -50
- package/lib/dialects/sqlite3/schema/sqlite-compiler.js +80 -80
- package/lib/dialects/sqlite3/schema/sqlite-tablecompiler.js +347 -347
- package/lib/dialects/sqlite3/schema/sqlite-viewcompiler.js +40 -40
- package/lib/execution/batch-insert.js +51 -51
- package/lib/execution/internal/delay.js +6 -6
- package/lib/execution/internal/ensure-connection-callback.js +41 -41
- package/lib/execution/internal/query-executioner.js +62 -62
- package/lib/execution/runner.js +325 -307
- package/lib/execution/transaction.js +409 -401
- package/lib/formatter/formatterUtils.js +42 -42
- package/lib/formatter/rawFormatter.js +84 -84
- package/lib/formatter/wrappingFormatter.js +250 -250
- package/lib/formatter.js +25 -25
- package/lib/index.js +3 -3
- package/lib/knex-builder/FunctionHelper.js +80 -54
- package/lib/knex-builder/Knex.js +59 -59
- package/lib/knex-builder/internal/config-resolver.js +57 -57
- package/lib/knex-builder/internal/parse-connection.js +87 -87
- package/lib/knex-builder/make-knex.js +345 -340
- package/lib/logger.js +76 -76
- package/lib/migrations/common/MigrationsLoader.js +36 -36
- package/lib/migrations/migrate/MigrationGenerator.js +84 -84
- package/lib/migrations/migrate/Migrator.js +598 -598
- package/lib/migrations/migrate/migrate-stub.js +17 -17
- package/lib/migrations/migrate/migration-list-resolver.js +33 -33
- package/lib/migrations/migrate/migrator-configuration-merger.js +58 -58
- package/lib/migrations/migrate/sources/fs-migrations.js +74 -74
- package/lib/migrations/migrate/stub/cjs.stub +15 -15
- package/lib/migrations/migrate/stub/coffee.stub +13 -13
- package/lib/migrations/migrate/stub/eg.stub +14 -14
- package/lib/migrations/migrate/stub/js-schema.stub +22 -22
- package/lib/migrations/migrate/stub/js.stub +22 -22
- package/lib/migrations/migrate/stub/knexfile-coffee.stub +34 -34
- package/lib/migrations/migrate/stub/knexfile-eg.stub +43 -43
- package/lib/migrations/migrate/stub/knexfile-js.stub +47 -47
- package/lib/migrations/migrate/stub/knexfile-ls.stub +35 -35
- package/lib/migrations/migrate/stub/knexfile-ts.stub +47 -47
- package/lib/migrations/migrate/stub/ls.stub +14 -14
- package/lib/migrations/migrate/stub/mjs.stub +23 -23
- package/lib/migrations/migrate/stub/ts-schema.stub +21 -21
- package/lib/migrations/migrate/stub/ts.stub +21 -21
- package/lib/migrations/migrate/table-creator.js +77 -77
- package/lib/migrations/migrate/table-resolver.js +27 -27
- package/lib/migrations/seed/Seeder.js +137 -137
- package/lib/migrations/seed/seed-stub.js +13 -13
- package/lib/migrations/seed/seeder-configuration-merger.js +60 -60
- package/lib/migrations/seed/sources/fs-seeds.js +65 -65
- package/lib/migrations/seed/stub/coffee.stub +9 -9
- package/lib/migrations/seed/stub/eg.stub +11 -11
- package/lib/migrations/seed/stub/js.stub +13 -13
- package/lib/migrations/seed/stub/ls.stub +11 -11
- package/lib/migrations/seed/stub/mjs.stub +12 -12
- package/lib/migrations/seed/stub/ts.stub +13 -13
- package/lib/migrations/util/fs.js +86 -86
- package/lib/migrations/util/import-file.js +12 -12
- package/lib/migrations/util/is-module-type.js +9 -9
- package/lib/migrations/util/template.js +52 -52
- package/lib/migrations/util/timestamp.js +14 -14
- package/lib/query/analytic.js +52 -52
- package/lib/query/constants.js +15 -15
- package/lib/query/joinclause.js +270 -270
- package/lib/query/method-constants.js +136 -135
- package/lib/query/querybuilder.js +1793 -1794
- package/lib/query/querycompiler.js +1591 -1580
- package/lib/raw.js +139 -139
- package/lib/ref.js +39 -39
- package/lib/schema/builder.js +115 -115
- package/lib/schema/columnbuilder.js +146 -146
- package/lib/schema/columncompiler.js +307 -307
- package/lib/schema/compiler.js +187 -187
- package/lib/schema/internal/helpers.js +55 -55
- package/lib/schema/tablebuilder.js +376 -376
- package/lib/schema/tablecompiler.js +433 -433
- package/lib/schema/viewbuilder.js +92 -92
- package/lib/schema/viewcompiler.js +138 -138
- package/lib/util/finally-mixin.js +13 -13
- package/lib/util/helpers.js +95 -95
- package/lib/util/is.js +32 -32
- package/lib/util/nanoid.js +40 -40
- package/lib/util/noop.js +1 -1
- package/lib/util/save-async-stack.js +14 -14
- package/lib/util/security.js +26 -0
- package/lib/util/string.js +190 -190
- package/lib/util/timeout.js +29 -29
- package/package.json +12 -10
- package/scripts/build.js +125 -125
- package/scripts/clean.js +31 -31
- package/scripts/docker-compose.yml +152 -152
- package/scripts/next-release-howto.md +24 -24
- package/scripts/oracledb-install-driver-libs.sh +82 -82
- package/scripts/release.sh +34 -34
- package/scripts/runkit-example.js +34 -34
- package/scripts/stress-test/README.txt +18 -18
- package/scripts/stress-test/docker-compose.yml +57 -57
- package/scripts/stress-test/knex-stress-test.js +208 -208
- package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +145 -145
- package/scripts/stress-test/mysql2-sudden-exit-without-error.js +100 -100
- package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +184 -184
- package/scripts/update_gitignore_for_tsc_output.js +90 -90
- package/types/index.d.ts +3273 -3233
- package/types/result.d.ts +27 -27
- package/types/tables.d.ts +4 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "knex",
|
|
3
|
-
"version": "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
|
|
61
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"colorette": "2.0.19",
|
|
65
|
-
"commander": "^
|
|
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.
|
|
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": "^
|
|
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.
|
|
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.
|
|
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.
|
|
147
|
-
"typescript": "
|
|
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();
|