2021-01-19 05:12:45 +08:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
const EmberApp = require("ember-cli/lib/broccoli/ember-app");
|
|
|
|
const resolve = require("path").resolve;
|
|
|
|
const mergeTrees = require("broccoli-merge-trees");
|
|
|
|
const concat = require("broccoli-concat");
|
2021-03-19 21:32:46 +08:00
|
|
|
const prettyTextEngine = require("./lib/pretty-text-engine");
|
|
|
|
const { createI18nTree } = require("./lib/translation-plugin");
|
|
|
|
const discourseScss = require("./lib/discourse-scss");
|
2021-01-19 05:12:45 +08:00
|
|
|
const funnel = require("broccoli-funnel");
|
2021-04-15 01:37:22 +08:00
|
|
|
const AssetRev = require("broccoli-asset-rev");
|
2021-01-19 05:12:45 +08:00
|
|
|
|
|
|
|
module.exports = function (defaults) {
|
|
|
|
let discourseRoot = resolve("../../../..");
|
|
|
|
let vendorJs = discourseRoot + "/vendor/assets/javascripts/";
|
|
|
|
|
2021-03-09 23:09:35 +08:00
|
|
|
let app = new EmberApp(defaults, {
|
|
|
|
autoRun: false,
|
2021-03-17 02:34:59 +08:00
|
|
|
"ember-qunit": {
|
|
|
|
insertContentForTestBody: false,
|
|
|
|
},
|
2021-05-05 21:02:48 +08:00
|
|
|
sourcemaps: {
|
|
|
|
// There seems to be a bug with brocolli-concat when sourcemaps are disabled
|
|
|
|
// that causes the `app.import` statements below to fail in production mode.
|
|
|
|
// This forces the use of `fast-sourcemap-concat` which works in production.
|
|
|
|
enabled: true,
|
|
|
|
},
|
2021-12-02 00:10:40 +08:00
|
|
|
autoImport: {
|
|
|
|
forbidEval: true,
|
|
|
|
},
|
2021-03-09 23:09:35 +08:00
|
|
|
});
|
2021-01-19 05:12:45 +08:00
|
|
|
|
2021-04-15 01:37:22 +08:00
|
|
|
// Ember CLI does this by default for the app tree, but for our extra bundles we
|
|
|
|
// need to do it ourselves in production mode.
|
|
|
|
const isProduction = EmberApp.env().includes("production");
|
|
|
|
function digest(tree) {
|
|
|
|
return isProduction ? new AssetRev(tree) : tree;
|
|
|
|
}
|
|
|
|
|
2021-01-19 05:12:45 +08:00
|
|
|
// WARNING: We should only import scripts here if they are not in NPM.
|
|
|
|
// For example: our very specific version of bootstrap-modal.
|
|
|
|
app.import(vendorJs + "bootbox.js");
|
|
|
|
app.import(vendorJs + "bootstrap-modal.js");
|
|
|
|
app.import(vendorJs + "jquery.ui.widget.js");
|
|
|
|
app.import(vendorJs + "jquery.fileupload.js");
|
2021-06-23 23:31:12 +08:00
|
|
|
app.import(vendorJs + "jquery.fileupload-process.js");
|
2021-08-11 23:42:04 +08:00
|
|
|
app.import(vendorJs + "caret_position.js");
|
2021-06-22 03:52:15 +08:00
|
|
|
app.import("node_modules/ember-source/dist/ember-template-compiler.js", {
|
|
|
|
type: "test",
|
|
|
|
});
|
2021-12-17 03:07:52 +08:00
|
|
|
app.import(discourseRoot + "/app/assets/javascripts/polyfills.js");
|
2021-01-19 05:12:45 +08:00
|
|
|
|
2021-05-13 01:44:24 +08:00
|
|
|
let adminVendor = funnel(vendorJs, {
|
|
|
|
files: ["resumable.js"],
|
|
|
|
});
|
|
|
|
|
2021-01-19 05:12:45 +08:00
|
|
|
return mergeTrees([
|
2021-03-19 21:32:46 +08:00
|
|
|
discourseScss(`${discourseRoot}/app/assets/stylesheets`, "testem.scss"),
|
|
|
|
createI18nTree(discourseRoot, vendorJs),
|
2021-01-19 05:12:45 +08:00
|
|
|
app.toTree(),
|
2021-03-19 21:32:46 +08:00
|
|
|
funnel(`${discourseRoot}/public/javascripts`, { destDir: "javascripts" }),
|
|
|
|
funnel(`${vendorJs}/highlightjs`, {
|
|
|
|
files: ["highlight-test-bundle.min.js"],
|
|
|
|
destDir: "assets/highlightjs",
|
|
|
|
}),
|
2021-04-15 01:37:22 +08:00
|
|
|
digest(
|
2021-05-13 01:44:24 +08:00
|
|
|
concat(mergeTrees([app.options.adminTree, adminVendor]), {
|
2021-04-15 01:37:22 +08:00
|
|
|
outputFile: `assets/admin.js`,
|
|
|
|
})
|
|
|
|
),
|
|
|
|
digest(prettyTextEngine(vendorJs, "discourse-markdown")),
|
2021-05-05 21:02:48 +08:00
|
|
|
digest(
|
|
|
|
concat("public/assets/scripts", {
|
|
|
|
outputFile: `assets/start-discourse.js`,
|
|
|
|
headerFiles: [`start-app.js`],
|
|
|
|
inputFiles: [`discourse-boot.js`],
|
|
|
|
})
|
|
|
|
),
|
2021-01-19 05:12:45 +08:00
|
|
|
]);
|
|
|
|
};
|