@ray-js/builder-component 0.3.0-beta.1c347991

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/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # @ray-js/builder-component
2
+
3
+ 组件构建器,将文件按运行时拆分为多文件。
4
+
5
+ ## Examples
6
+
7
+ ### 全平台转换
8
+
9
+ input:
10
+
11
+ ```
12
+ src/index.ts
13
+ ```
14
+
15
+ output:
16
+
17
+ ```
18
+ index.web.js
19
+ index.wechat.js
20
+ index.native.js
21
+ index.js
22
+ ```
23
+
24
+ ### 按需平台
25
+
26
+ input:
27
+
28
+ ```
29
+ src/index.ts
30
+ src/index.wechat.ts
31
+ ```
32
+
33
+ output:
34
+
35
+ ```
36
+ index.web.js
37
+ index.wechat.js # 原文件转换
38
+ index.native.js
39
+ index.js
40
+ ```
@@ -0,0 +1,10 @@
1
+ import type { NodePath } from '@babel/traverse';
2
+ import * as t from '@babel/types';
3
+ declare const _default: (api: object, options: {
4
+ replace: (source: string) => string;
5
+ }, dirname: string) => {
6
+ visitor: {
7
+ ImportDeclaration(this: import("@babel/core").PluginPass, path: NodePath<t.ImportDeclaration>): void;
8
+ };
9
+ };
10
+ export default _default;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const helper_plugin_utils_1 = require("@babel/helper-plugin-utils");
4
+ exports.default = (0, helper_plugin_utils_1.declare)((api, options) => {
5
+ api.assertVersion(7);
6
+ const replace = options.replace;
7
+ return {
8
+ visitor: {
9
+ ImportDeclaration(path) {
10
+ path.node.source.value = replace(path.node.source.value);
11
+ },
12
+ },
13
+ };
14
+ });
package/lib/build.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { CliOptions } from '@ray-js/types';
2
+ declare type Options = Pick<CliOptions, 'source' | 'output' | 'watch'> & {
3
+ cwd: string;
4
+ transformMode: 'pure' | 'auto';
5
+ };
6
+ export default function build(options: Options): Promise<void>;
7
+ export {};
package/lib/build.js ADDED
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const chokidar_1 = __importDefault(require("chokidar"));
16
+ const colors_1 = __importDefault(require("colors"));
17
+ const globby_1 = __importDefault(require("globby"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const shared_1 = require("@ray-js/shared");
20
+ const transform_1 = require("./transform");
21
+ colors_1.default.enable();
22
+ const LOG_PREFIX = 'builder-component';
23
+ function build(options) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const { cwd = process.cwd(), source = 'src', output = 'lib', watch = false, transformMode = 'auto', } = options;
26
+ const sourceDir = path_1.default.join(cwd, source);
27
+ const outputDir = path_1.default.join(cwd, output);
28
+ if (watch) {
29
+ shared_1.log.info(LOG_PREFIX, 'watching...');
30
+ const watcher = chokidar_1.default.watch(['**/*.*', '!**/demos/**/*.*', '!**/__tests__/**/*.*', '!**/*.md'], {
31
+ cwd: sourceDir,
32
+ });
33
+ watcher.on('all', (event, filePath, _) => __awaiter(this, void 0, void 0, function* () {
34
+ const file = path_1.default.join(sourceDir, filePath);
35
+ if (event === 'change' || event === 'add') {
36
+ shared_1.log.info(`[${event}]`, filePath);
37
+ yield (0, transform_1.transformPlatformFiles)({
38
+ file,
39
+ mode: transformMode,
40
+ sourceDir,
41
+ outputDir,
42
+ }).catch((error) => {
43
+ console.error(error);
44
+ });
45
+ }
46
+ else {
47
+ shared_1.log.warn(`[${event}]`, filePath);
48
+ if (event === 'unlink') {
49
+ yield (0, transform_1.unlinkPlatformFiles)({
50
+ outputDir,
51
+ sourceDir,
52
+ file,
53
+ });
54
+ }
55
+ }
56
+ }));
57
+ }
58
+ else {
59
+ const files = globby_1.default.sync(['**/*.*', '!**/demos/**/*.*', '!**/__tests__/**/*.*'], {
60
+ dot: false,
61
+ cwd: sourceDir,
62
+ absolute: true,
63
+ });
64
+ if (!files || files.length === 0) {
65
+ shared_1.log.error(LOG_PREFIX, 'Not exist any files'.red, cwd);
66
+ process.exit(0);
67
+ }
68
+ for (let index = 0; index < files.length; index++) {
69
+ const file = files[index];
70
+ yield (0, transform_1.transformPlatformFiles)({
71
+ file,
72
+ mode: transformMode,
73
+ sourceDir,
74
+ outputDir,
75
+ }).catch((error) => {
76
+ console.error(error);
77
+ });
78
+ }
79
+ const dtsStartTime = Date.now();
80
+ shared_1.log.info(LOG_PREFIX, 'd.ts generating...'.yellow);
81
+ const typeFiles = yield (0, transform_1.generateDTS)(files.filter((file) => /\.tsx?$/.test(file)));
82
+ for (let index = 0; index < Object.entries(typeFiles).length; index++) {
83
+ const [dtsFile, content] = Object.entries(typeFiles)[index];
84
+ const fileBase = path_1.default.relative(sourceDir, dtsFile);
85
+ const dtsFilePath = path_1.default.join(outputDir, fileBase);
86
+ (0, shared_1.writeFileSync)(dtsFilePath, content);
87
+ shared_1.log.verbose(LOG_PREFIX, fileBase.gray);
88
+ }
89
+ shared_1.log.info(LOG_PREFIX, 'd.ts done.'.green, Date.now() - dtsStartTime, 'ms');
90
+ }
91
+ });
92
+ }
93
+ exports.default = build;
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import build from './build';
2
+ export { build };
package/lib/index.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.build = void 0;
7
+ const build_1 = __importDefault(require("./build"));
8
+ exports.build = build_1.default;
@@ -0,0 +1,8 @@
1
+ import type { Modules } from '@ray-js/babel-preset-standard';
2
+ import { Target } from '@ray-js/types';
3
+ export declare type BabelTransformOptions = {
4
+ modules: Modules;
5
+ target?: Target;
6
+ pure?: boolean;
7
+ };
8
+ export default function babelTransform(file: string, options: BabelTransformOptions): Promise<import("@babel/core").BabelFileResult>;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const fs_extra_1 = __importDefault(require("fs-extra"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const core_1 = require("@babel/core");
18
+ const env_loader_1 = require("@ray-js/env-loader");
19
+ function babelTransform(file, options) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ options = Object.assign({ modules: 'auto' }, options);
22
+ let babelPlugin = [];
23
+ let codeMap;
24
+ const source = fs_extra_1.default.readFileSync(file).toString();
25
+ let code = source;
26
+ if (options.target) {
27
+ const { target } = options;
28
+ process.env.PLATFORM = target;
29
+ process.env.REMAX_PLATFORM = target;
30
+ babelPlugin = [
31
+ [
32
+ require.resolve('../babel/import-replacement'),
33
+ {
34
+ replace: function (source) {
35
+ if (source.endsWith('.mini')) {
36
+ // .mini.js 是 remax 中对小程序统称的文件后缀
37
+ return source.replace(/\.mini$/, `.${target}`);
38
+ }
39
+ return source;
40
+ },
41
+ },
42
+ ],
43
+ [
44
+ require.resolve('babel-plugin-import'),
45
+ {
46
+ libraryName: '@remax/wechat',
47
+ transformToDefaultImport: false,
48
+ camel2DashComponentName: false,
49
+ customName: (name) => {
50
+ if (name.endsWith('Props')) {
51
+ return '@remax/wechat';
52
+ }
53
+ return `@remax/wechat/esm/hostComponents/${name}/index`;
54
+ },
55
+ },
56
+ '@remax/wechat',
57
+ ],
58
+ ];
59
+ const { code: removeEnvCode, map } = yield (0, env_loader_1.traverseImport)({ platform: options.target }, source, {
60
+ sourceMaps: true,
61
+ sourceMapTarget: path_1.default.basename(file),
62
+ sourceFileName: file,
63
+ });
64
+ code = removeEnvCode;
65
+ codeMap = map;
66
+ }
67
+ return yield (0, core_1.transformAsync)(code, {
68
+ babelrc: false,
69
+ configFile: false,
70
+ sourceMaps: true,
71
+ presets: [
72
+ [
73
+ require.resolve('@ray-js/babel-preset-standard'),
74
+ {
75
+ modules: options.modules,
76
+ jsx: 'react',
77
+ platform: options.target,
78
+ macro: false,
79
+ // native 不需要 polyfill
80
+ useBuiltIns: ['native', 'ios', 'android'].includes(options.target) ? false : undefined,
81
+ },
82
+ ],
83
+ ],
84
+ plugins: babelPlugin,
85
+ inputSourceMap: codeMap,
86
+ filename: file,
87
+ });
88
+ });
89
+ }
90
+ exports.default = babelTransform;
@@ -0,0 +1,17 @@
1
+ import { TransformOptions } from '@ray-js/types';
2
+ export { generateDTS } from './type';
3
+ export declare function replaceExt(file: string, ext: string): string;
4
+ /**
5
+ * 根据原文件,移除对应生成的平台文件
6
+ * @param options
7
+ */
8
+ export declare function unlinkPlatformFiles(options: {
9
+ file: string;
10
+ outputDir: string;
11
+ sourceDir: string;
12
+ }): void;
13
+ /**
14
+ * 转换器 将文件转成所需要的格式
15
+ * ts|js 需要生成对应的平台地址
16
+ */
17
+ export declare function transformPlatformFiles(options: TransformOptions): Promise<void>;
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.transformPlatformFiles = exports.unlinkPlatformFiles = exports.replaceExt = exports.generateDTS = void 0;
16
+ const colors_1 = __importDefault(require("colors"));
17
+ const fs_extra_1 = __importDefault(require("fs-extra"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const shared_1 = require("@ray-js/shared");
20
+ const types_1 = require("@ray-js/types");
21
+ const babelTransform_1 = __importDefault(require("./babelTransform"));
22
+ var type_1 = require("./type");
23
+ Object.defineProperty(exports, "generateDTS", { enumerable: true, get: function () { return type_1.generateDTS; } });
24
+ colors_1.default.enable();
25
+ function replaceExt(file, ext) {
26
+ if (typeof file !== 'string') {
27
+ return file;
28
+ }
29
+ if (file.length === 0) {
30
+ return file;
31
+ }
32
+ const nFileName = path_1.default.basename(file, path_1.default.extname(file)) + ext;
33
+ return path_1.default.join(path_1.default.dirname(file), nFileName);
34
+ }
35
+ exports.replaceExt = replaceExt;
36
+ const transformTarget = [
37
+ types_1.PlatformTarget.wechat,
38
+ types_1.PlatformTarget.web,
39
+ types_1.PlatformTarget.ios,
40
+ types_1.PlatformTarget.android,
41
+ types_1.PlatformTarget.tuya,
42
+ ]; // 构建的目标平台
43
+ /**
44
+ * 根据原文件,移除对应生成的平台文件
45
+ * @param options
46
+ */
47
+ function unlinkPlatformFiles(options) {
48
+ const { sourceDir, outputDir, file } = options;
49
+ const fileBase = path_1.default.relative(sourceDir, file);
50
+ let fileExt;
51
+ if (fileBase.endsWith('.d.ts')) {
52
+ fileExt = '.d.ts';
53
+ }
54
+ else {
55
+ fileExt = path_1.default.extname(fileBase);
56
+ }
57
+ const likePaths = [];
58
+ const libFile = path_1.default.join(outputDir, fileBase);
59
+ if (['.ts', '.tsx', '.js', '.jsx'].includes(fileExt) && fileExt !== '.d.ts') {
60
+ likePaths.push(replaceExt(libFile, '.js'));
61
+ transformTarget.forEach((target) => {
62
+ likePaths.push(replaceExt(libFile, `.${target}.js`));
63
+ });
64
+ }
65
+ else {
66
+ likePaths.push(libFile);
67
+ }
68
+ likePaths.filter(fs_extra_1.default.existsSync).map(fs_extra_1.default.unlinkSync);
69
+ }
70
+ exports.unlinkPlatformFiles = unlinkPlatformFiles;
71
+ const PLATFORM_EXTENSION = [...Object.keys(types_1.PlatformTarget), 'mini', 'native'];
72
+ // 平台文件后缀
73
+ // .mini.js 是 remax 定义的小程序文件后缀
74
+ const REGEXP_PLATFORM_EXTENSION = new RegExp(`\\.(?<target>(${PLATFORM_EXTENSION.join('|')}))\\.(ts|js)x?$`);
75
+ /**
76
+ * 是否为平台文件后缀文件
77
+ *
78
+ * @param file
79
+ * @example
80
+ * .native.js .wechat.js .tuya.js
81
+ */
82
+ function isPlatformExtension(file) {
83
+ const fileName = path_1.default.basename(file);
84
+ return REGEXP_PLATFORM_EXTENSION.test(fileName);
85
+ }
86
+ function getOtherPlatformFile(file) {
87
+ const platform = [];
88
+ const ext = path_1.default.extname(file);
89
+ PLATFORM_EXTENSION.forEach((target) => {
90
+ const targetExt = `.${target}${ext}`;
91
+ const targetFile = replaceExt(file, targetExt);
92
+ if (fs_extra_1.default.existsSync(targetFile)) {
93
+ if (target in types_1.PlatformTargetPresets) {
94
+ platform.push(...types_1.PlatformTargetPresets[target]);
95
+ }
96
+ else {
97
+ platform.push(target);
98
+ }
99
+ }
100
+ });
101
+ return platform;
102
+ }
103
+ /**
104
+ * 转换器 将文件转成所需要的格式
105
+ * ts|js 需要生成对应的平台地址
106
+ */
107
+ function transformPlatformFiles(options) {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ const { file, mode, outputDir, sourceDir } = options;
110
+ const startTime = Date.now();
111
+ const fileBase = path_1.default.relative(sourceDir, file);
112
+ let fileExt;
113
+ if (file.endsWith('.d.ts')) {
114
+ fileExt = '.d.ts';
115
+ }
116
+ else {
117
+ fileExt = path_1.default.extname(file);
118
+ }
119
+ let transformPure = true;
120
+ // 生成 JS 文件
121
+ let babelResult;
122
+ let outputFile;
123
+ let transformOutputTargets = [];
124
+ if (['.ts', '.tsx', '.js', '.jsx'].includes(fileExt) && fileExt !== '.d.ts') {
125
+ // 智能构建模式, 将 index.js 分成对应的几个端
126
+ if (mode === 'auto') {
127
+ if (isPlatformExtension(file)) {
128
+ transformPure = false;
129
+ // 自定义构建模式, 根据当前文件后缀
130
+ // 根据当前文件后缀, 获取目标平台
131
+ const { groups } = REGEXP_PLATFORM_EXTENSION.exec(fileBase);
132
+ const { target: targetPreset } = groups;
133
+ if (targetPreset in types_1.PlatformTargetPresets) {
134
+ // 预置模式
135
+ const platformTargetPreset = types_1.PlatformTargetPresets[targetPreset];
136
+ for (let k = 0; k < platformTargetPreset.length; k++) {
137
+ const target = platformTargetPreset[k];
138
+ const ext = `.${target}.js`;
139
+ babelResult = yield (0, babelTransform_1.default)(file, { target: target, modules: false });
140
+ transformOutputTargets.push(target);
141
+ if (babelResult && typeof babelResult.code === 'string') {
142
+ outputFile = replaceExt(path_1.default.join(outputDir, fileBase.replace(`.${targetPreset}`, '')), ext);
143
+ yield (0, shared_1.writeFileSync)(outputFile, babelResult.code);
144
+ }
145
+ }
146
+ }
147
+ else {
148
+ babelResult = yield (0, babelTransform_1.default)(file, {
149
+ target: targetPreset,
150
+ modules: false,
151
+ });
152
+ transformOutputTargets.push(targetPreset);
153
+ if (babelResult && typeof babelResult.code === 'string') {
154
+ outputFile = replaceExt(path_1.default.join(outputDir, fileBase), '.js');
155
+ yield (0, shared_1.writeFileSync)(outputFile, babelResult.code);
156
+ }
157
+ }
158
+ }
159
+ else {
160
+ const presetPlatform = getOtherPlatformFile(file);
161
+ for (let k = 0; k < transformTarget.length; k++) {
162
+ const target = transformTarget[k];
163
+ // 存在其他平台的预置文件不再生成
164
+ if (!presetPlatform.includes(target)) {
165
+ const ext = `.${target}.js`;
166
+ babelResult = yield (0, babelTransform_1.default)(file, { target, modules: false });
167
+ transformOutputTargets.push(target);
168
+ if (babelResult && typeof babelResult.code === 'string') {
169
+ outputFile = replaceExt(path_1.default.join(outputDir, fileBase), ext);
170
+ yield (0, shared_1.writeFileSync)(outputFile, babelResult.code);
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ if (transformPure) {
177
+ // 保留原始文件
178
+ // 纯 js es6=>es5 转换 可用于 browser & 小程序 使用的工具库构建
179
+ babelResult = yield (0, babelTransform_1.default)(file, { pure: true, modules: false });
180
+ transformOutputTargets.push('*');
181
+ if (babelResult && typeof babelResult.code === 'string') {
182
+ outputFile = replaceExt(path_1.default.join(outputDir, fileBase), '.js');
183
+ yield (0, shared_1.writeFileSync)(outputFile, babelResult.code);
184
+ }
185
+ }
186
+ }
187
+ else {
188
+ // 非 js 等文件,直接拷贝输出
189
+ const fileContent = fs_extra_1.default.readFileSync(file);
190
+ const outputFile = path_1.default.join(outputDir, fileBase);
191
+ yield (0, shared_1.writeFileSync)(outputFile, fileContent);
192
+ }
193
+ shared_1.log.info(`transform`, fileBase.cyan, transformOutputTargets, `${Date.now() - startTime}ms`.white);
194
+ });
195
+ }
196
+ exports.transformPlatformFiles = transformPlatformFiles;
@@ -0,0 +1,3 @@
1
+ export declare function generateDTS(files: string[]): Promise<{
2
+ [path: string]: string;
3
+ }>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.generateDTS = void 0;
36
+ const ts = __importStar(require("typescript"));
37
+ function generateDTS(files) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ const createdFiles = {};
40
+ const options = {
41
+ allowJs: true,
42
+ declaration: true,
43
+ emitDeclarationOnly: true,
44
+ esModuleInterop: true,
45
+ target: ts.ScriptTarget.ES5,
46
+ noUnusedParameters: true,
47
+ noUnusedLocals: true,
48
+ strictNullChecks: true,
49
+ jsx: ts.JsxEmit.Preserve,
50
+ allowSyntheticDefaultImports: true,
51
+ };
52
+ const host = ts.createCompilerHost(options);
53
+ host.writeFile = (fileName, contents) => {
54
+ createdFiles[fileName] = contents;
55
+ };
56
+ const program = ts.createProgram(files, options, host);
57
+ program.emit();
58
+ return createdFiles;
59
+ });
60
+ }
61
+ exports.generateDTS = generateDTS;
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@ray-js/builder-component",
3
+ "version": "0.3.0-beta.1c347991",
4
+ "description": "Ray builder for component",
5
+ "keywords": [
6
+ "ray"
7
+ ],
8
+ "author": "子长 <zichang.nong@tuya.com>",
9
+ "license": "MIT",
10
+ "main": "lib/index.js",
11
+ "files": [
12
+ "lib"
13
+ ],
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "registry": "https://registry.npmjs.org"
17
+ },
18
+ "scripts": {
19
+ "clean": "rm -rf lib esm dts",
20
+ "build": "tsc -p ./tsconfig.build.json",
21
+ "watch": "tsc -p ./tsconfig.build.json --watch"
22
+ },
23
+ "dependencies": {
24
+ "@babel/core": "^7.16.0",
25
+ "@babel/helper-plugin-utils": "^7.14.5",
26
+ "@babel/traverse": "^7.16.3",
27
+ "@babel/types": "^7.16.0",
28
+ "@ray-js/babel-preset-standard": "^0.3.0-beta.1c347991",
29
+ "@ray-js/env-loader": "^0.3.0-beta.1c347991",
30
+ "@ray-js/shared": "^0.3.0-beta.1c347991",
31
+ "@ray-js/types": "^0.3.0-beta.1c347991",
32
+ "babel-plugin-import": "^1.13.3",
33
+ "chokidar": "^3.5.2",
34
+ "colors": "1.4.0",
35
+ "fs-extra": "^10.0.0",
36
+ "globby": "11.x"
37
+ },
38
+ "devDependencies": {
39
+ "@types/fs-extra": "^9.0.12",
40
+ "typescript": "^4.5.2"
41
+ },
42
+ "maintainers": [
43
+ {
44
+ "name": "tuyafe",
45
+ "email": "tuyafe@tuya.com"
46
+ }
47
+ ],
48
+ "gitHead": "e0bd013022ddda63380d3c9e20fd8cadb46cd61f",
49
+ "repository": {}
50
+ }