forked from apache/arrow
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpackage-task.js
More file actions
116 lines (109 loc) · 5.32 KB
/
package-task.js
File metadata and controls
116 lines (109 loc) · 5.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import { metadataFiles, packageJSONFields, mainExport, npmPkgName, npmOrgName, targetDir, packageName, observableFromStreams } from './util.js';
import gulp from 'gulp';
import { memoizeTask } from './memoize-task.js';
import { ReplaySubject, EMPTY as ObservableEmpty, forkJoin as ObservableForkJoin } from 'rxjs';
import { share } from 'rxjs/operators';
import gulpJsonTransform from 'gulp-json-transform';
export const packageTask = ((cache) => memoizeTask(cache, function bundle(target, format) {
if (target === `src`) return ObservableEmpty();
const out = targetDir(target, format);
const jsonTransform = gulpJsonTransform(target === npmPkgName ? createMainPackageJson(target, format) :
target === `ts` ? createTypeScriptPackageJson(target, format)
: createScopedPackageJSON(target, format),
2);
return ObservableForkJoin([
observableFromStreams(gulp.src(metadataFiles), gulp.dest(out)), // copy metadata files
observableFromStreams(gulp.src(`package.json`), jsonTransform, gulp.dest(out)) // write packageJSONs
]).pipe(share({ connector: () => new ReplaySubject(), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
}))({});
export default packageTask;
const createMainPackageJson = (target, format) => (orig) => ({
...createTypeScriptPackageJson(target, format)(orig),
bin: orig.bin,
name: npmPkgName,
type: 'commonjs',
main: `${mainExport}.node.js`,
module: `${mainExport}.node.mjs`,
browser: {
[`./${mainExport}.node.js`]: `./${mainExport}.dom.js`,
[`./${mainExport}.node.mjs`]: `./${mainExport}.dom.mjs`
},
exports: {
'.': {
node: {
import: `./${mainExport}.node.mjs`,
require: `./${mainExport}.node.js`,
},
import: `./${mainExport}.dom.mjs`,
require: `./${mainExport}.dom.js`,
},
'./*': {
import: `./*.mjs`,
require: `./*.js`
}
},
types: `${mainExport}.node.d.ts`,
unpkg: `${mainExport}.es2015.min.js`,
jsdelivr: `${mainExport}.es2015.min.js`,
sideEffects: false,
esm: { mode: `all`, sourceMap: true }
});
const createTypeScriptPackageJson = (target, format) => (orig) => ({
...createScopedPackageJSON(target, format)(orig),
bin: undefined,
main: `${mainExport}.node.ts`,
module: `${mainExport}.node.ts`,
types: `${mainExport}.node.ts`,
browser: `${mainExport}.dom.ts`,
type: 'module',
sideEffects: false,
esm: { mode: `auto`, sourceMap: true },
dependencies: {
'@types/node': '*',
...orig.dependencies
}
});
const createScopedPackageJSON = (target, format) => (({ name, ...orig }) =>
packageJSONFields.reduce(
(xs, key) => ({ ...xs, [key]: xs[key] || orig[key] }),
{
// un-set version, since it's automatically applied during the release process
version: undefined,
// set the scoped package name (e.g. "@apache-arrow/esnext-esm")
name: `${npmOrgName}/${packageName(target, format)}`,
// set "unpkg"/"jsdeliver" if building scoped UMD target
unpkg: format === 'umd' ? `${mainExport}.js` : undefined,
jsdelivr: format === 'umd' ? `${mainExport}.js` : undefined,
// set "browser" if building scoped UMD target, otherwise "Arrow.dom"
browser: format === 'umd' ? `${mainExport}.js` : `${mainExport}.dom.js`,
// set "main" to "Arrow" if building scoped UMD target, otherwise "Arrow.node"
main: format === 'umd' ? `${mainExport}.js` : `${mainExport}.node.js`,
// set "type" to `module` or `commonjs` (https://nodejs.org/api/packages.html#packages_type)
type: format === 'esm' ? `module` : `commonjs`,
// set "module" if building scoped ESM target
module: format === 'esm' ? `${mainExport}.node.js` : undefined,
// set "sideEffects" to false as a hint to Webpack that it's safe to tree-shake the ESM target
sideEffects: format === 'esm' ? false : undefined,
// include "esm" settings for https://www.npmjs.com/package/esm if building scoped ESM target
esm: format === `esm` ? { mode: `auto`, sourceMap: true } : undefined,
// set "types" (for TypeScript/VSCode)
types: format === 'umd' ? undefined : `${mainExport}.node.d.ts`,
}
)
);