Files
threshold-ui/addons/api/index.js
T
hashiccandZhihe Li 63b810d53f Migrate from ember-cli-mirage to miragejs (#3088)
* chore: 🤖 import explicit mirage references

* chore: 🤖 add mirage setupMirage helper

* chore: 🤖 working example with application adapter test

* chore: 🤖 use internal setupMirage test helper from api addon

* chore: 🤖 conditionally load mirage

* chore: 🤖 filter mirage folder inclusion in production builds

* chore: 🤖 drop ember-mirage and use our own test helpers

* chore: 🤖 collapse reference to import declaration

* docs: ✏️ add comment better explaining the mirage test env

* chore: 🤖 update configuration and manage mirage-related deps

* fix: 🐛 restore ipc mock and add missing checkOS handler

* chore: 🤖 add comment explaining omitting mirage deps in build

* chore: 🤖 allow mirage.enabled to include deps and handlers

* chore: 🤖 re-enable mirage for core dummy app

* Add missing copyright headers

* chore: 🤖 use embroider macros to conditionally start mirage

* docs: ✏️ update api readme for mirage changes

* chore: 🤖 replace remaining ember-cli-mirage references

* chore: 🤖 add mirage to test builds

* fix: 🐛 ensure that auto mirage start doesn't happen in test env

* chore: 🤖 use const instead of var

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 use cleaner logic for excluded api build modules

* fix: 🐛 handle issue where importSync was too eager

This was fixed by bumping the @embroider/macros dependency that includes
a fix to this issue:
https://github.com/embroider-build/embroider/pull/2511

* refactor: 💡 move mirage from addon to app directory

* refactor: 💡 update mirage test helper to be a factory

* chore: 🤖 exclude mirage directory when necessary at build time

* chore: 🤖 add miragejs as admin dev dependency

* refactor: 💡 update reference to startMirage

* chore: 🤖 update local mirage test helper

* chore: 🤖 change import path for mirage on desktop

* chore: 🤖 update imports in tests for startMirage

* chore: 🤖 update startMirage imports for api addon tests

* chore: 🤖 add miragejs dev dep to desktop

* docs: ✏️ update README

* chore: 🤖 set up setupMirage for core tests

* chore: 🤖 fix copyright header

* Add missing copyright headers

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2026-02-03 13:54:32 -05:00

92 lines
2.5 KiB
JavaScript

/**
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
'use strict';
const { WatchedDir } = require('broccoli-source');
const funnel = require('broccoli-funnel');
const merge = require('broccoli-merge-trees');
const path = require('path');
const buildWorkers = require('./broccoli-plugins/build-workers');
const workerRoot = path.join(__dirname, 'addon', 'workers');
module.exports = {
name: require('./package').name,
options: {
// Don't automatically import sqlite, we need to manually control how it gets used
autoImport: {
exclude: ['@sqlite.org/sqlite-wasm'],
},
},
treeForApp(appTree) {
if (!this._includeMirageInBuild()) {
return funnel(appTree, {
exclude: ['mirage/**/*'],
});
}
return appTree;
},
treeForAddon() {
// Exclude anything in the workers folder from being bundled in the final
// build as we're manually bundling the files ourselves below.
const excludedModules = ['api/workers/**/*'];
const tree = this._super.treeForAddon.apply(this, arguments);
return funnel(tree, {
exclude: excludedModules,
});
},
treeForPublic(tree) {
const env = this.parent?.app?.env ?? 'production';
const { enableSqlite } = this.parent?.app?.options[this.name] ?? {};
// If sqlite is not enabled and we're not running a test directly in the addon,
// we don't need to build the workers
if (!enableSqlite && this.app?.env !== 'test') {
return tree;
}
// We need to process and build our workers separately from ember as these
// workers are not part of the app and are not getting properly bundled otherwise
let workerTree = new WatchedDir(workerRoot);
workerTree = new buildWorkers([workerTree]);
workerTree.isProduction = env === 'production';
const workers = funnel(workerTree, {
destDir: 'workers',
});
// Also include the sqlite wasm file directly to be placed next to the workers
const sqliteWasmDirectoryPath = path.resolve(
require.resolve('@sqlite.org/sqlite-wasm/sqlite3.wasm'),
'..',
);
const wasmFile = funnel(sqliteWasmDirectoryPath, {
files: ['sqlite3.wasm'],
destDir: 'workers',
});
const trees = [workers, wasmFile];
if (tree) {
trees.push(tree);
}
return merge(trees);
},
_includeMirageInBuild() {
const env = this.parent.app?.env ?? 'production';
const config = this.project.config(env);
return Boolean(config.mirage?.enabled);
},
};