Skip to content

Commit eac298b

Browse files
authored
Build esm with rollup (#6631)
* Implement core rollup build * Fix import of scss files + fix icons import for rollup build * Implement rollup build for react * Refactor icons build * Fix rollup icons build * Fix icons build (2) * Fix build icons (3) * Fix rollup sourcemaps
1 parent 2da4933 commit eac298b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+284
-225
lines changed

packages/survey-creator-core/package.json

+12-5
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
"url": "https://github.com/surveyjs/survey-creator.git"
99
},
1010
"scripts": {
11-
"build": "webpack --env buildType=dev --env emitDeclarations --env emitStyles --env emitNonSourceFiles && webpack --env buildType=prod --env emitStyles && webpack --config ./webpack.fesm.js --env buildType=prod",
12-
"build:i18n": "webpack --config ./webpack.i18n.js --env buildType=dev && webpack --config ./webpack.i18n.js --env buildType=prod && webpack --config ./webpack.i18n.fesm.js --env buildType=prod",
13-
"build:themes": "node creator-themes-import.js && webpack --config ./webpack.themes.config.js --env buildType=dev --env emitDeclarations && webpack --config ./webpack.themes.config.js --env buildType=prod && webpack --config ./webpack.themes.fesm.config.js --env buildType=prod",
11+
"build": "webpack --env buildType=dev --env emitDeclarations --env emitStyles --env emitNonSourceFiles && webpack --env buildType=prod --env emitStyles && rollup -c",
12+
"build:i18n": "webpack --config ./webpack.i18n.js --env buildType=dev && webpack --config ./webpack.i18n.js --env buildType=prod && rollup -c rollup.i18n.config.js",
13+
"build:themes": "node creator-themes-import.js && webpack --config ./webpack.themes.config.js --env buildType=dev --env emitDeclarations && webpack --config ./webpack.themes.config.js --env buildType=prod && rollup -c rollup.themes.config.js",
1414
"build:all": "npm run build && npm run build:i18n && npm run build:themes",
1515
"test": "jest",
1616
"test:cov": "jest --coverage",
1717
"test:dev": "jest --watch",
1818
"test:postcss": "postcss build/survey-creator-core.css --silent -u postcss-calc -u autoprefixer -u postcss-fail-on-warn -o survey-creator-core.postcss.css && rimraf survey-creator-core.postcss.css",
1919
"doc_gen": "node doc_generator/editor_docgenerator.js src/entries/index.ts",
20-
"watch:dev": "concurrently \"webpack --env buildType=dev --watch --env emitDeclarations --env emitStyles\" \"webpack --config ./webpack.fesm.js --env buildType=prod --watch\" ",
20+
"watch:dev": "concurrently \"webpack --env buildType=dev --watch --env emitDeclarations --env emitStyles\" \"rollup -c -w\" ",
2121
"watch:prod": "webpack --env buildType=prod --watch",
2222
"release": "standard-version --message \"Release: %s [azurepipelines skip]\"",
2323
"remove-package-lock": "rimraf package-lock.json",
@@ -27,6 +27,10 @@
2727
"survey-core": "../../../survey-library/packages/survey-core/build"
2828
},
2929
"devDependencies": {
30+
"@rollup/plugin-commonjs": "^28.0.2",
31+
"@rollup/plugin-node-resolve": "^16.0.0",
32+
"@rollup/plugin-replace": "^6.0.2",
33+
"@rollup/plugin-typescript": "^12.1.2",
3034
"@types/ace": "0.0.32",
3135
"@types/jest": "^26.0.24",
3236
"@types/node": "7.0.4",
@@ -37,6 +41,7 @@
3741
"concurrently": "^5.2.0",
3842
"copy-webpack-plugin": "^6.3.1",
3943
"css-loader": "^7.1.2",
44+
"fast-glob": "^3.3.3",
4045
"html-loader": "^5.0.0",
4146
"http-server": "^14.1.1",
4247
"jest": "^29.7.0",
@@ -51,12 +56,14 @@
5156
"postcss-cli": "10.1.0",
5257
"postcss-fail-on-warn": "0.2.1",
5358
"rimraf": "2.5.4",
59+
"rollup": "^4.34.8",
60+
"rollup-plugin-license": "^3.6.0",
5461
"sass": "^1.62.1",
5562
"sass-loader": "^16.0.4",
5663
"standard-version": "^9.5.0",
5764
"style-loader": "^1.2.1",
58-
"svg-inline-loader": "^0.8.2",
5965
"surveyjs-doc-generator": "git+https://github.com/surveyjs/surveyjs-doc-generator.git",
66+
"svg-inline-loader": "^0.8.2",
6067
"ts-jest": "^29.2.2",
6168
"ts-loader": "^9.5.2",
6269
"ts-node": "3.3.0",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
const typescript = require("@rollup/plugin-typescript");
2+
const nodeResolve = require("@rollup/plugin-node-resolve");
3+
const replace = require("@rollup/plugin-replace");
4+
const commonjs = require("@rollup/plugin-commonjs");
5+
const bannerPlugin = require("rollup-plugin-license");
6+
7+
const path = require("path");
8+
const svgLoader = require("svg-inline-loader");
9+
const fg = require("fast-glob");
10+
const readFile = require("fs").readFileSync;
11+
const VERSION = require("./package.json").version;
12+
const input = { "survey-creator-core": path.resolve(__dirname, "./src/entries/index.ts") };
13+
14+
var banner = [
15+
"SurveyJS Creator v" + VERSION,
16+
"(c) 2015-" + new Date().getFullYear() + " Devsoft Baltic OÜ - http://surveyjs.io/",
17+
"Github: https://github.com/surveyjs/survey-creator",
18+
"License: https://surveyjs.io/Licenses#SurveyCreator",
19+
].join("\n");
20+
21+
module.exports = (options) => {
22+
options = options ?? {};
23+
if(!options.tsconfig) {
24+
options.tsconfig = path.resolve(__dirname, "./tsconfig.fesm.json");
25+
}
26+
if(!options.dir) {
27+
options.dir = path.resolve(__dirname, "./build/fesm");
28+
}
29+
const iconsMap = {
30+
"iconsV1": fg.convertPathToPattern(path.resolve(__dirname, "./src/images-v1")) + "/*.svg",
31+
"iconsV2": fg.convertPathToPattern(path.resolve(__dirname, "./src/images-v2")) + "/*.svg"
32+
};
33+
return {
34+
input,
35+
context: "this",
36+
external: ["survey-core"],
37+
plugins: [
38+
{
39+
name: "icons",
40+
resolveId: (id) => {
41+
if (Object.keys(iconsMap).includes(id)) {
42+
return id;
43+
}
44+
},
45+
load: async (id) => {
46+
if (Object.keys(iconsMap).includes(id)) {
47+
const icons = {};
48+
for (const iconPath of await fg.glob(iconsMap[id])) {
49+
icons[path.basename(iconPath).replace(/\.svg$/, "").toLocaleLowerCase()] = svgLoader.getExtractedSVG(readFile(iconPath).toString());
50+
}
51+
return `export default ${JSON.stringify(icons, undefined, "\t")}`;
52+
}
53+
}
54+
},
55+
{
56+
name: "remove-scss-imports",
57+
load: (id) => {
58+
if(id.match(/\.scss$/)) return "";
59+
}
60+
},
61+
//force take correct .js file for papaparse dependency
62+
nodeResolve({ browser: true }),
63+
commonjs(),
64+
typescript({ inlineSources: true, sourceMap: true, tsconfig: options.tsconfig, compilerOptions: {
65+
declaration: false,
66+
declarationDir: null
67+
} }),
68+
replace({
69+
preventAssignment: false,
70+
values: {
71+
"process.env.RELEASE_DATE": JSON.stringify(new Date().toISOString().slice(0, 10)),
72+
"process.env.VERSION": JSON.stringify(VERSION),
73+
}
74+
}),
75+
bannerPlugin({
76+
banner: {
77+
content: banner,
78+
commentStyle: "ignored",
79+
}
80+
})
81+
],
82+
output: [
83+
{
84+
dir: options.dir,
85+
format: "esm",
86+
exports: "named",
87+
sourcemap: true,
88+
},
89+
],
90+
};
91+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
const defaultConfig = require("./rollup.config");
2+
const path = require("path");
3+
const fs = require("fs");
4+
const input = {
5+
"survey-creator-core.i18n": path.resolve(__dirname, "./src/entries/i18n.ts")
6+
};
7+
8+
function patchEntries() {
9+
fs.readdirSync(path.resolve(__dirname, "./src/localization")).forEach(file => {
10+
var extension = path.extname(file);
11+
if (extension.toLowerCase() === ".ts") {
12+
input[`i18n/${path.basename(file, extension)}`] = (path.resolve(__dirname, "./src/localization") + "/" + file);
13+
}
14+
});
15+
input["i18n/index"] = path.resolve(__dirname, "./src/entries/i18n.ts");
16+
}
17+
18+
module.exports = () => {
19+
let options = {
20+
tsconfig: path.resolve(__dirname, "./tsconfig.i18n.json")
21+
};
22+
const config = defaultConfig(options);
23+
patchEntries();
24+
config.input = input;
25+
config.external = ["survey-creator-core"];
26+
return config;
27+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const defaultConfig = require("./rollup.config");
2+
const path = require("path");
3+
const input = { index: path.resolve(__dirname, "./src/themes/index.ts") };
4+
module.exports = () => {
5+
let options = {
6+
dir: path.resolve(__dirname, "./build/fesm/themes"),
7+
tsconfig: path.resolve(__dirname, "./tsconfig.themes.json")
8+
};
9+
const config = defaultConfig(options);
10+
config.input = input;
11+
return config;
12+
};

packages/survey-creator-core/src/components/header/logo-image.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Base, CssClassBuilder, property, Serializer, SurveyModel } from "survey-core";
22
import { SurveyCreatorModel } from "../../creator-base";
33
import { getAcceptedTypesByContentMode } from "../../utils/utils";
4-
require("./logo-image.scss");
4+
import "./logo-image.scss";
55

66
export class LogoImageViewModel extends Base {
77
constructor(private creator: SurveyCreatorModel, public root: HTMLDivElement) {

packages/survey-creator-core/src/components/image-item-value.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { SurveyCreatorModel } from "../creator-base";
33
import { ItemValueWrapperViewModel } from "./item-value";
44
import { getAcceptedTypesByContentMode } from "../utils/utils";
55

6-
require("./image-item-value.scss");
6+
import "./image-item-value.scss";
77
export class ImageItemValueWrapperViewModel extends ItemValueWrapperViewModel {
88
private isChoosingNewFile = false;
99
@property({ defaultValue: false }) isFileDragging: boolean;

packages/survey-creator-core/src/components/item-value.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
} from "survey-core";
1212
import { SurveyCreatorModel } from "../creator-base";
1313
import { DragDropChoices } from "survey-core";
14-
require("./item-value.scss");
14+
import "./item-value.scss";
1515
import { getLocString } from "../editorLocalization";
1616
import { getNextItemText } from "../utils/creator-utils";
1717
import { ICollectionItemAllowOperations } from "../creator-settings";

packages/survey-creator-core/src/components/link-value.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Question, Serializer, QuestionFactory, property, Helpers } from "survey-core";
22
import { editorLocalization } from "../editorLocalization";
33

4-
require("./link-value.scss");
4+
import "./link-value.scss";
55

66
export class QuestionLinkValueModel extends Question {
77
public linkClickCallback: () => void;

packages/survey-creator-core/src/components/list-theme.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require("./list.scss");
1+
import "./list.scss";
22

33
export var listComponentCss = {
44
root: "svc-list__container",

packages/survey-creator-core/src/components/matrix-cell.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { toggleHovered } from "../utils/html-element-utils";
1818
import { SurveyHelper } from "../survey-helper";
1919
import { editorLocalization } from "../editorLocalization";
2020

21-
require("./matrix-cell.scss");
21+
import "./matrix-cell.scss";
2222

2323
export class MatrixCellWrapperEditSurvey {
2424
private surveyValue: SurveyModel;

packages/survey-creator-core/src/components/page-navigator/page-navigator.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { PagesController } from "../../pages-controller";
22
import { PageModel, PopupModel, ListModel, Base, propertyArray, SurveyModel, property, IAction, Action, ComputedUpdater } from "survey-core";
33

4-
require("./page-navigator.scss");
5-
require("./page-navigator-item.scss");
4+
import "./page-navigator.scss";
5+
import "./page-navigator-item.scss";
66
import { getLocString } from "../../editorLocalization";
77
import { listComponentCss } from "../list-theme";
88

packages/survey-creator-core/src/components/page.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { SurveyHelper } from "../survey-helper";
77
import { settings } from "../creator-settings";
88
import { DragDropSurveyElements } from "../survey-elements";
99

10-
require("./page.scss");
10+
import "./page.scss";
1111

1212
export class PageAdorner extends SurveyElementAdornerBase<PageModel> {
1313
@property({ defaultValue: false }) isSelected: boolean;

packages/survey-creator-core/src/components/question-dropdown.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { SurveyCreatorModel } from "../creator-base";
44
import { QuestionAdornerViewModel } from "./question";
55
import { editorLocalization } from "../editorLocalization";
66

7-
require("./question-dropdown.scss");
7+
import "./question-dropdown.scss";
88

99
export class QuestionDropdownAdornerViewModel extends QuestionAdornerViewModel {
1010
@property({ defaultValue: true }) private isCollapsed: boolean;

packages/survey-creator-core/src/components/question-image.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { QuestionAdornerViewModel } from "./question";
55
import { getAcceptedTypesByContentMode } from "../utils/utils";
66
import { getLocString } from "../editorLocalization";
77

8-
require("./question-image.scss");
8+
import "./question-image.scss";
99

1010
export class QuestionImageAdornerViewModel extends QuestionAdornerViewModel {
1111
private editorSurveyModel: SurveyModel;

packages/survey-creator-core/src/components/question-rating.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { SurveyCreatorModel } from "../creator-base";
1414
import { getLocString } from "../editorLocalization";
1515
import { getNextValue, getQuestionFromObj } from "../utils/creator-utils";
1616

17-
require("./question-rating.scss");
17+
import "./question-rating.scss";
1818

1919
export class QuestionRatingAdornerViewModel extends Base {
2020
constructor(

packages/survey-creator-core/src/components/question.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import {
3535
propertyExists,
3636
} from "../utils/creator-utils";
3737
import { SurveyElementActionContainer, SurveyElementAdornerBase } from "./action-container-view-model";
38-
require("./question.scss");
38+
import "./question.scss";
3939
import { settings } from "../creator-settings";
4040
import { StringEditorConnector, StringItemsNavigatorBase } from "./string-editor";
4141
import { DragDropSurveyElements, isPanelDynamic } from "../survey-elements";

packages/survey-creator-core/src/components/results.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { editorLocalization } from "../editorLocalization";
22
import * as Survey from "survey-core";
33
import { Base, property, propertyArray } from "survey-core";
44

5-
require("./results.scss");
5+
import "./results.scss";
66

77
export class SurveyResultsItemModel extends Base {
88
@property({ defaultValue: true }) collapsed: boolean;

packages/survey-creator-core/src/components/row.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
property
88
} from "survey-core";
99
import { SurveyCreatorModel } from "../creator-base";
10-
require("./row.scss");
10+
import "./row.scss";
1111

1212
export class RowViewModel extends Base {
1313
constructor(

packages/survey-creator-core/src/components/scroll.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
property
88
} from "survey-core";
99
import { SurveyCreatorModel } from "../creator-base";
10-
require("./row.scss");
10+
import "./row.scss";
1111

1212
export class ScrollViewModel {
1313
private _containerElementValue: HTMLElement;

packages/survey-creator-core/src/components/simulator.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Base, CssClassBuilder, property, SurveyModel } from "survey-core";
22
import { SurveyCreatorModel } from "../creator-base";
33

4-
require("./simulator.scss");
4+
import "./simulator.scss";
55

66
export class SurveySimulatorModel extends Base {
77
private surveyChanged() {

packages/survey-creator-core/src/components/switcher/switcher.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Action, CssClassBuilder, property } from "survey-core";
22

3-
require("./switcher.scss");
3+
import "./switcher.scss";
44

55
export class Switcher extends Action {
66
@property() checked: boolean;

packages/survey-creator-core/src/components/tabs/designer.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { DragDropSurveyElements } from "../../survey-elements";
77
import { SurveyElementAdornerBase } from "../action-container-view-model";
88
import { assign } from "../../utils/utils";
99
import designTabSurveyThemeJSON from "../../designTabSurveyThemeJSON";
10-
require("./designer.scss");
10+
import "./designer.scss";
1111

1212
export const initialSettingsAllowShowEmptyTitleInDesignMode = settings.allowShowEmptyTitleInDesignMode;
1313

packages/survey-creator-core/src/components/tabs/json-editor-ace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
JsonEditorBaseModel,
88
TabJsonEditorBasePlugin
99
} from "./json-editor-plugin";
10-
require("./json-editor-ace.scss");
10+
import "./json-editor-ace.scss";
1111
export class AceJsonEditorModel extends JsonEditorBaseModel {
1212
public static aceBasePath: string = "";
1313
private aceEditor: any;

packages/survey-creator-core/src/components/tabs/json-editor-textarea.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
JsonEditorBaseModel,
77
TabJsonEditorBasePlugin
88
} from "./json-editor-plugin";
9-
require("./json-editor-textarea.scss");
9+
import "./json-editor-textarea.scss";
1010

1111
export class TextareaJsonEditorModel extends JsonEditorBaseModel {
1212
@property({ defaultValue: "", onSet: (_, target) => target.onTextChanged() })

packages/survey-creator-core/src/components/tabs/logic-ui.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { setSurveyJSONForPropertyGrid } from "../../property-grid/index";
1313
import { QuestionEmbeddedSurveyModel } from "../embedded-survey";
1414
import { updateMatrixLogicRemoveAction, updateMatrixLogicExpandAction } from "../../utils/actions";
1515

16-
require("./logic-ui.scss");
16+
import "./logic-ui.scss";
1717

1818
import { logicCss } from "./logic-theme";
1919

packages/survey-creator-core/src/components/tabs/logic.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { editorLocalization } from "../../editorLocalization";
33
import { ISurveyCreatorOptions, EmptySurveyCreatorOptions, settings } from "../../creator-settings";
44
import { ISurveyLogicItemOwner, SurveyLogicItem, SurveyLogicAction } from "./logic-items";
55
import { SurveyLogicTypes, SurveyLogicType, ISurveyLogicType } from "./logic-types";
6-
require("./logic.scss");
6+
import "./logic.scss";
77

88
export function initLogicOperator(question: QuestionDropdownModel) {
99
question.popupModel.isFocusedContent = true;

packages/survey-creator-core/src/components/tabs/test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SurveyCreatorModel } from "../../creator-base";
22
import { PreviewViewModel } from "./preview";
3-
require("./test.scss");
3+
import "./test.scss";
44

55
export class TestSurveyTabViewModel extends PreviewViewModel {
66
constructor(surveyProvider: SurveyCreatorModel, startThemeClasses: any) {

0 commit comments

Comments
 (0)