@modern-js/app-tools 2.54.5 → 2.55.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/dist/cjs/builder/generator/createBuilderOptions.js +18 -1
- package/dist/cjs/builder/shared/builderPlugins/adapterHtml.js +2 -2
- package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +2 -2
- package/dist/cjs/commands/index.js +2 -2
- package/dist/cjs/commands/serve.js +1 -0
- package/dist/cjs/config/default.js +2 -0
- package/dist/cjs/config/legacy/createSourceConfig.js +2 -1
- package/dist/cjs/hooks.js +2 -5
- package/dist/cjs/plugins/analyze/constants.js +3 -18
- package/dist/cjs/plugins/analyze/getFileSystemEntry.js +36 -11
- package/dist/cjs/plugins/analyze/index.js +7 -64
- package/dist/cjs/plugins/analyze/templates.js +2 -55
- package/dist/cjs/plugins/analyze/utils.js +0 -86
- package/dist/esm/builder/generator/createBuilderOptions.js +21 -1
- package/dist/esm/builder/shared/builderPlugins/adapterHtml.js +1 -1
- package/dist/esm/builder/shared/builderPlugins/adapterSSR.js +1 -1
- package/dist/esm/commands/index.js +1 -1
- package/dist/esm/commands/serve.js +1 -0
- package/dist/esm/config/default.js +2 -0
- package/dist/esm/config/legacy/createSourceConfig.js +2 -1
- package/dist/esm/hooks.js +2 -5
- package/dist/esm/plugins/analyze/constants.js +2 -12
- package/dist/esm/plugins/analyze/getFileSystemEntry.js +57 -14
- package/dist/esm/plugins/analyze/index.js +25 -128
- package/dist/esm/plugins/analyze/templates.js +1 -17
- package/dist/esm/plugins/analyze/utils.js +1 -87
- package/dist/esm-node/builder/generator/createBuilderOptions.js +18 -1
- package/dist/esm-node/builder/shared/builderPlugins/adapterHtml.js +1 -1
- package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.js +1 -1
- package/dist/esm-node/commands/index.js +1 -1
- package/dist/esm-node/commands/serve.js +1 -0
- package/dist/esm-node/config/default.js +2 -0
- package/dist/esm-node/config/legacy/createSourceConfig.js +2 -1
- package/dist/esm-node/hooks.js +2 -5
- package/dist/esm-node/plugins/analyze/constants.js +2 -12
- package/dist/esm-node/plugins/analyze/getFileSystemEntry.js +37 -12
- package/dist/esm-node/plugins/analyze/index.js +10 -67
- package/dist/esm-node/plugins/analyze/templates.js +1 -52
- package/dist/esm-node/plugins/analyze/utils.js +1 -86
- package/dist/types/builder/builder-webpack/createCopyPattern.d.ts +2 -2
- package/dist/types/builder/generator/createBuilderOptions.d.ts +1 -2
- package/dist/types/builder/generator/getBuilderTargets.d.ts +1 -1
- package/dist/types/builder/generator/index.d.ts +1 -2
- package/dist/types/builder/shared/builderPlugins/adapterBasic.d.ts +1 -1
- package/dist/types/builder/shared/builderPlugins/adapterHtml.d.ts +1 -1
- package/dist/types/builder/shared/builderPlugins/adapterSSR.d.ts +1 -1
- package/dist/types/builder/shared/builderPlugins/adapterWorker.d.ts +1 -1
- package/dist/types/builder/shared/bundlerPlugins/RouterPlugin.d.ts +1 -1
- package/dist/types/commands/inspect.d.ts +1 -1
- package/dist/types/plugins/analyze/constants.d.ts +1 -6
- package/dist/types/plugins/analyze/templates.d.ts +0 -14
- package/dist/types/plugins/analyze/utils.d.ts +0 -11
- package/dist/types/types/config/source.d.ts +5 -0
- package/dist/types/types/hooks.d.ts +7 -27
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/types/legacyConfig/output.d.ts +1 -1
- package/dist/types/types/legacyConfig/source.d.ts +4 -0
- package/dist/types/utils/register.d.ts +1 -1
- package/package.json +17 -18
- package/dist/cjs/plugins/analyze/generateCode.js +0 -185
- package/dist/esm/plugins/analyze/generateCode.js +0 -296
- package/dist/esm-node/plugins/analyze/generateCode.js +0 -149
- package/dist/types/plugins/analyze/generateCode.d.ts +0 -16
@@ -1,149 +0,0 @@
|
|
1
|
-
import path from "path";
|
2
|
-
import { findExists, fs, getEntryOptions, JS_EXTENSIONS, SERVER_RENDER_FUNCTION_NAME } from "@modern-js/utils";
|
3
|
-
import * as templates from "./templates";
|
4
|
-
import { ENTRY_POINT_FILE_NAME, ENTRY_BOOTSTRAP_FILE_NAME } from "./constants";
|
5
|
-
import { getDefaultImports } from "./utils";
|
6
|
-
const createImportSpecifier = (specifiers) => {
|
7
|
-
let defaults = "";
|
8
|
-
const named = [];
|
9
|
-
for (const { local, imported } of specifiers) {
|
10
|
-
if (local && imported) {
|
11
|
-
named.push(`${imported} as ${local}`);
|
12
|
-
} else if (local) {
|
13
|
-
defaults = local;
|
14
|
-
} else {
|
15
|
-
named.push(imported);
|
16
|
-
}
|
17
|
-
}
|
18
|
-
if (defaults && named.length) {
|
19
|
-
return `${defaults}, { ${named.join(", ")} }`;
|
20
|
-
} else if (defaults) {
|
21
|
-
return defaults;
|
22
|
-
} else {
|
23
|
-
return `{ ${named.join(", ")} }`;
|
24
|
-
}
|
25
|
-
};
|
26
|
-
const createImportStatements = (statements) => {
|
27
|
-
const deDuplicated = [];
|
28
|
-
const seen = /* @__PURE__ */ new Map();
|
29
|
-
for (const { value, specifiers, initialize } of statements) {
|
30
|
-
if (!seen.has(value)) {
|
31
|
-
deDuplicated.push({
|
32
|
-
value,
|
33
|
-
specifiers,
|
34
|
-
initialize
|
35
|
-
});
|
36
|
-
seen.set(value, specifiers);
|
37
|
-
} else {
|
38
|
-
var _deDuplicated_modifyIndex;
|
39
|
-
seen.get(value).push(...specifiers);
|
40
|
-
const modifyIndex = deDuplicated.findIndex((v) => v.value === value);
|
41
|
-
var _deDuplicated_modifyIndex_initialize;
|
42
|
-
const originInitialize = (_deDuplicated_modifyIndex_initialize = (_deDuplicated_modifyIndex = deDuplicated[modifyIndex]) === null || _deDuplicated_modifyIndex === void 0 ? void 0 : _deDuplicated_modifyIndex.initialize) !== null && _deDuplicated_modifyIndex_initialize !== void 0 ? _deDuplicated_modifyIndex_initialize : "";
|
43
|
-
deDuplicated[modifyIndex].initialize = originInitialize.concat(`
|
44
|
-
${initialize || ""}`);
|
45
|
-
}
|
46
|
-
}
|
47
|
-
return deDuplicated.map(({ value, specifiers, initialize }) => `import ${createImportSpecifier(specifiers)} from '${value}';
|
48
|
-
${initialize || ""}`).join("\n");
|
49
|
-
};
|
50
|
-
const generateCode = async (appContext, config, entrypoints, api) => {
|
51
|
-
const { internalDirectory, srcDirectory, appDirectory, internalDirAlias, internalSrcAlias, runtimeConfigFile } = appContext;
|
52
|
-
const hookRunners = api.useHookRunners();
|
53
|
-
const customRuntimeConfig = findExists(JS_EXTENSIONS.map((ext) => path.resolve(srcDirectory, `${runtimeConfigFile}${ext}`)));
|
54
|
-
const importsStatemets = /* @__PURE__ */ new Map();
|
55
|
-
await Promise.all(entrypoints.map((entrypoint) => generateEntryCode(entrypoint, customRuntimeConfig)));
|
56
|
-
return {
|
57
|
-
importsStatemets
|
58
|
-
};
|
59
|
-
async function generateEntryCode(entrypoint, customRuntimeConfig2) {
|
60
|
-
const { entryName, isAutoMount } = entrypoint;
|
61
|
-
if (isAutoMount) {
|
62
|
-
const { imports } = await hookRunners.modifyEntryImports({
|
63
|
-
entrypoint,
|
64
|
-
imports: getDefaultImports({
|
65
|
-
entrypoint,
|
66
|
-
srcDirectory,
|
67
|
-
appDirectory,
|
68
|
-
internalSrcAlias,
|
69
|
-
internalDirAlias,
|
70
|
-
runtimeConfigFile,
|
71
|
-
customRuntimeConfig: customRuntimeConfig2
|
72
|
-
})
|
73
|
-
});
|
74
|
-
importsStatemets.set(entryName, imports);
|
75
|
-
const entryFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_POINT_FILE_NAME}`);
|
76
|
-
entrypoint.internalEntry = entryFile;
|
77
|
-
}
|
78
|
-
}
|
79
|
-
};
|
80
|
-
const generateIndexCode = async ({ appContext, api, entrypoints, config, importsStatemets, bundlerConfigs }) => {
|
81
|
-
const hookRunners = api.useHookRunners();
|
82
|
-
const { mountId } = config.html;
|
83
|
-
const { internalDirectory, packageName, srcDirectory, runtimeConfigFile } = appContext;
|
84
|
-
const customRuntimeConfig = findExists(JS_EXTENSIONS.map((ext) => path.resolve(srcDirectory, `${runtimeConfigFile}${ext}`)));
|
85
|
-
await Promise.all(entrypoints.map(async (entrypoint) => {
|
86
|
-
const { entryName, isMainEntry, isAutoMount, customBootstrap, fileSystemRoutes } = entrypoint;
|
87
|
-
if (isAutoMount) {
|
88
|
-
const { plugins } = await hookRunners.modifyEntryRuntimePlugins({
|
89
|
-
entrypoint,
|
90
|
-
plugins: [],
|
91
|
-
bundlerConfigs
|
92
|
-
});
|
93
|
-
const { code: renderFunction } = await hookRunners.modifyEntryRenderFunction({
|
94
|
-
entrypoint,
|
95
|
-
code: templates.renderFunction({
|
96
|
-
plugins,
|
97
|
-
customBootstrap,
|
98
|
-
customRuntimeConfig,
|
99
|
-
fileSystemRoutes
|
100
|
-
})
|
101
|
-
});
|
102
|
-
const { exportStatement } = await hookRunners.modifyEntryExport({
|
103
|
-
entrypoint,
|
104
|
-
exportStatement: "export default AppWrapper;"
|
105
|
-
});
|
106
|
-
const imports = importsStatemets.get(entryName);
|
107
|
-
const code = templates.index({
|
108
|
-
mountId,
|
109
|
-
imports: createImportStatements(imports),
|
110
|
-
renderFunction,
|
111
|
-
exportStatement
|
112
|
-
});
|
113
|
-
const entryFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_POINT_FILE_NAME}`);
|
114
|
-
if (config.source.enableAsyncEntry) {
|
115
|
-
let rawAsyncEntryCode = `import('./${ENTRY_BOOTSTRAP_FILE_NAME}');`;
|
116
|
-
const ssr = getEntryOptions(entryName, isMainEntry, config.server.ssr, config.server.ssrByEntries, packageName);
|
117
|
-
if (ssr) {
|
118
|
-
rawAsyncEntryCode = `
|
119
|
-
export const ${SERVER_RENDER_FUNCTION_NAME} = async (...args) => {
|
120
|
-
let entry = await ${rawAsyncEntryCode};
|
121
|
-
if (entry.default instanceof Promise){
|
122
|
-
entry = await entry.default;
|
123
|
-
return entry.default.${SERVER_RENDER_FUNCTION_NAME}.apply(null, args);
|
124
|
-
}
|
125
|
-
return entry.${SERVER_RENDER_FUNCTION_NAME}.apply(null, args);
|
126
|
-
};
|
127
|
-
if(typeof window!=='undefined'){
|
128
|
-
${rawAsyncEntryCode}
|
129
|
-
}
|
130
|
-
`;
|
131
|
-
}
|
132
|
-
const { code: asyncEntryCode } = await hookRunners.modifyAsyncEntry({
|
133
|
-
entrypoint,
|
134
|
-
code: rawAsyncEntryCode
|
135
|
-
});
|
136
|
-
fs.outputFileSync(entryFile, asyncEntryCode, "utf8");
|
137
|
-
const bootstrapFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_BOOTSTRAP_FILE_NAME}`);
|
138
|
-
fs.outputFileSync(bootstrapFile, code, "utf8");
|
139
|
-
} else {
|
140
|
-
fs.outputFileSync(entryFile, code, "utf8");
|
141
|
-
}
|
142
|
-
}
|
143
|
-
}));
|
144
|
-
};
|
145
|
-
export {
|
146
|
-
createImportStatements,
|
147
|
-
generateCode,
|
148
|
-
generateIndexCode
|
149
|
-
};
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import { IAppContext, PluginAPI } from '@modern-js/core';
|
2
|
-
import type { Entrypoint } from '@modern-js/types';
|
3
|
-
import { RspackConfig, WebpackConfig } from '@rsbuild/shared';
|
4
|
-
import { AppNormalizedConfig, AppTools, ImportStatement } from '../../types';
|
5
|
-
export declare const createImportStatements: (statements: ImportStatement[]) => string;
|
6
|
-
export declare const generateCode: (appContext: IAppContext, config: AppNormalizedConfig<'shared'>, entrypoints: Entrypoint[], api: PluginAPI<AppTools<'shared'>>) => Promise<{
|
7
|
-
importsStatemets: Map<string, ImportStatement[]>;
|
8
|
-
}>;
|
9
|
-
export declare const generateIndexCode: ({ appContext, api, entrypoints, config, importsStatemets, bundlerConfigs, }: {
|
10
|
-
appContext: IAppContext;
|
11
|
-
api: PluginAPI<AppTools<'shared'>>;
|
12
|
-
entrypoints: Entrypoint[];
|
13
|
-
config: AppNormalizedConfig<'shared'>;
|
14
|
-
importsStatemets: Map<string, ImportStatement[]>;
|
15
|
-
bundlerConfigs?: RspackConfig[] | WebpackConfig[] | undefined;
|
16
|
-
}) => Promise<void>;
|