dkershner6-projen-sst-nextjs-app
Version:
DKershner's preferred constructs for Projen SST Apps using Nextjs.
62 lines • 8.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Node20SstNextjsApp = void 0;
const clone_deep_1 = __importDefault(require("clone-deep"));
const dkershner6_projen_react_1 = require("dkershner6-projen-react");
const dkershner6_projen_sst_app_1 = require("dkershner6-projen-sst-app");
const dkershner6_projen_typescript_1 = require("dkershner6-projen-typescript");
const javascript_1 = require("projen/lib/javascript");
const util_1 = require("projen/lib/util");
const projen_nextjs_1 = require("projen-nextjs");
class Node20SstNextjsApp extends dkershner6_projen_sst_app_1.Node20SstApp {
nextjsTsconfig;
constructor(options) {
const defaultNextjsOptions = {
tsconfigDev: (0, util_1.deepMerge)([
{ fileName: "tsconfig.dev.json" },
options.tsconfig ?? {},
]),
};
const combinedOptions = (0, util_1.deepMerge)([
(0, clone_deep_1.default)(dkershner6_projen_react_1.RECOMMENDED_NODE_20_REACT_PROJECT_OPTIONS),
defaultNextjsOptions,
options,
]);
super(combinedOptions);
this.gitignore.exclude(".next", "out");
this.nextjsTsconfig = new javascript_1.TypescriptConfig(this, (0, util_1.deepMerge)([
(0, clone_deep_1.default)({
compilerOptions: {
...dkershner6_projen_typescript_1.PROJEN_COMPILER_OPTION_DEFAULTS,
...dkershner6_projen_typescript_1.RECOMMENDED_TSCONFIG_COMPILER_OPTIONS,
downlevelIteration: true,
},
}),
projen_nextjs_1.NEXTJS_TSCONFIG_OPTIONS,
{
exclude: [
...(projen_nextjs_1.NEXTJS_TSCONFIG_OPTIONS?.exclude ?? []),
...this.tsconfigDev.exclude,
],
include: [
...(projen_nextjs_1.NEXTJS_TSCONFIG_OPTIONS?.include ?? []),
...this.tsconfigDev.include,
],
},
options?.nextjsTsconfig ?? {},
]));
new dkershner6_projen_react_1.Node20ReactTypescriptConfigurer(this, {
projectType: "app",
});
new projen_nextjs_1.NextjsEslint(this);
if (options.nextjsJest ?? true) {
new projen_nextjs_1.NextjsJestConfigFile(this, options.nextjsJestConfigFileOptions);
}
new projen_nextjs_1.NextjsTasks(this);
}
}
exports.Node20SstNextjsApp = Node20SstNextjsApp;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQW1DO0FBQ25DLHFFQUdpQztBQUNqQyx5RUFBOEU7QUFDOUUsK0VBR3NDO0FBQ3RDLHNEQUcrQjtBQUMvQiwwQ0FBNEM7QUFDNUMsaURBTXVCO0FBb0J2QixNQUFhLGtCQUFtQixTQUFRLHdDQUFZO0lBQ2hDLGNBQWMsQ0FBbUI7SUFFakQsWUFBWSxPQUFrQztRQUMxQyxNQUFNLG9CQUFvQixHQUd0QjtZQUNBLFdBQVcsRUFBRSxJQUFBLGdCQUFTLEVBQUM7Z0JBQ25CLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFO2dCQUNqQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUU7YUFDekIsQ0FBNEI7U0FDaEMsQ0FBQztRQUVGLE1BQU0sZUFBZSxHQUFHLElBQUEsZ0JBQVMsRUFBQztZQUM5QixJQUFBLG9CQUFTLEVBQUMsbUVBQXlDLENBQUM7WUFDcEQsb0JBQW9CO1lBQ3BCLE9BQU87U0FDVixDQUE4QixDQUFDO1FBRWhDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLDZCQUFnQixDQUN0QyxJQUFJLEVBQ0osSUFBQSxnQkFBUyxFQUFDO1lBQ04sSUFBQSxvQkFBUyxFQUFDO2dCQUNOLGVBQWUsRUFBRTtvQkFDYixHQUFHLDhEQUErQjtvQkFDbEMsR0FBRyxvRUFBcUM7b0JBQ3hDLGtCQUFrQixFQUFFLElBQUk7aUJBQzNCO2FBQ0osQ0FBQztZQUNGLHVDQUF1QjtZQUN2QjtnQkFDSSxPQUFPLEVBQUU7b0JBQ0wsR0FBRyxDQUFDLHVDQUF1QixFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7b0JBQzNDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO2lCQUM5QjtnQkFDRCxPQUFPLEVBQUU7b0JBQ0wsR0FBRyxDQUFDLHVDQUF1QixFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7b0JBQzNDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO2lCQUM5QjthQUNKO1lBQ0QsT0FBTyxFQUFFLGNBQWMsSUFBSSxFQUFFO1NBQ2hDLENBQTRCLENBQ2hDLENBQUM7UUFFRixJQUFJLHlEQUErQixDQUFDLElBQUksRUFBRTtZQUN0QyxXQUFXLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUM7UUFDSCxJQUFJLDRCQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksb0NBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxJQUFJLDJCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNKO0FBMURELGdEQTBEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcImNsb25lLWRlZXBcIjtcbmltcG9ydCB7XG4gICAgUkVDT01NRU5ERURfTk9ERV8yMF9SRUFDVF9QUk9KRUNUX09QVElPTlMsXG4gICAgTm9kZTIwUmVhY3RUeXBlc2NyaXB0Q29uZmlndXJlcixcbn0gZnJvbSBcImRrZXJzaG5lcjYtcHJvamVuLXJlYWN0XCI7XG5pbXBvcnQgeyBOb2RlMjBTc3RBcHAsIE5vZGUyMFNzdEFwcE9wdGlvbnMgfSBmcm9tIFwiZGtlcnNobmVyNi1wcm9qZW4tc3N0LWFwcFwiO1xuaW1wb3J0IHtcbiAgICBQUk9KRU5fQ09NUElMRVJfT1BUSU9OX0RFRkFVTFRTLFxuICAgIFJFQ09NTUVOREVEX1RTQ09ORklHX0NPTVBJTEVSX09QVElPTlMsXG59IGZyb20gXCJka2Vyc2huZXI2LXByb2plbi10eXBlc2NyaXB0XCI7XG5pbXBvcnQge1xuICAgIFR5cGVzY3JpcHRDb25maWcsXG4gICAgVHlwZXNjcmlwdENvbmZpZ09wdGlvbnMsXG59IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCJwcm9qZW4vbGliL3V0aWxcIjtcbmltcG9ydCB7XG4gICAgTkVYVEpTX1RTQ09ORklHX09QVElPTlMsXG4gICAgTmV4dGpzRXNsaW50LFxuICAgIE5leHRqc0plc3RDb25maWdGaWxlLFxuICAgIE5leHRqc0plc3RDb25maWdGaWxlT3B0aW9ucyxcbiAgICBOZXh0anNUYXNrcyxcbn0gZnJvbSBcInByb2plbi1uZXh0anNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOb2RlMjBTc3ROZXh0anNBcHBPcHRpb25zIGV4dGVuZHMgTm9kZTIwU3N0QXBwT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50IG5leHQvamVzdCBvbiB0aGUgcHJvamVjdCdzIGplc3RDb25maWcuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgbmV4dGpzSmVzdD86IGJvb2xlYW47XG5cbiAgICBuZXh0anNKZXN0Q29uZmlnRmlsZU9wdGlvbnM/OiBOZXh0anNKZXN0Q29uZmlnRmlsZU9wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBBIGN1c3RvbSB0c2NvbmZpZyBmb3IgbmV4dGpzIGRldmVsb3BtZW50LCBzZXBhcmF0ZSBmcm9tIFByb2plbidzIHRzY29uZmlnLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBSZWNvbW1lbmRlZCB0c2NvbmZpZyBmb3IgTmV4dC5qcyBkZXZlbG9wbWVudCBieSBWZXJjZWwuXG4gICAgICovXG4gICAgbmV4dGpzVHNjb25maWc/OiBUeXBlc2NyaXB0Q29uZmlnT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE5vZGUyMFNzdE5leHRqc0FwcCBleHRlbmRzIE5vZGUyMFNzdEFwcCB7XG4gICAgcHVibGljIHJlYWRvbmx5IG5leHRqc1RzY29uZmlnOiBUeXBlc2NyaXB0Q29uZmlnO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogTm9kZTIwU3N0TmV4dGpzQXBwT3B0aW9ucykge1xuICAgICAgICBjb25zdCBkZWZhdWx0TmV4dGpzT3B0aW9uczogT21pdDxcbiAgICAgICAgICAgIE5vZGUyMFNzdE5leHRqc0FwcE9wdGlvbnMsXG4gICAgICAgICAgICBcImRlZmF1bHRSZWxlYXNlQnJhbmNoXCIgfCBcImNka1ZlcnNpb25cIiB8IFwibmFtZVwiXG4gICAgICAgID4gPSB7XG4gICAgICAgICAgICB0c2NvbmZpZ0RldjogZGVlcE1lcmdlKFtcbiAgICAgICAgICAgICAgICB7IGZpbGVOYW1lOiBcInRzY29uZmlnLmRldi5qc29uXCIgfSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRzY29uZmlnID8/IHt9LFxuICAgICAgICAgICAgXSkgYXMgVHlwZXNjcmlwdENvbmZpZ09wdGlvbnMsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29tYmluZWRPcHRpb25zID0gZGVlcE1lcmdlKFtcbiAgICAgICAgICAgIGRlZXBDbG9uZShSRUNPTU1FTkRFRF9OT0RFXzIwX1JFQUNUX1BST0pFQ1RfT1BUSU9OUyksXG4gICAgICAgICAgICBkZWZhdWx0TmV4dGpzT3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIF0pIGFzIE5vZGUyMFNzdE5leHRqc0FwcE9wdGlvbnM7XG5cbiAgICAgICAgc3VwZXIoY29tYmluZWRPcHRpb25zKTtcblxuICAgICAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKFwiLm5leHRcIiwgXCJvdXRcIik7XG5cbiAgICAgICAgdGhpcy5uZXh0anNUc2NvbmZpZyA9IG5ldyBUeXBlc2NyaXB0Q29uZmlnKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGRlZXBNZXJnZShbXG4gICAgICAgICAgICAgICAgZGVlcENsb25lKHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5QUk9KRU5fQ09NUElMRVJfT1BUSU9OX0RFRkFVTFRTLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uUkVDT01NRU5ERURfVFNDT05GSUdfQ09NUElMRVJfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sZXZlbEl0ZXJhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBORVhUSlNfVFNDT05GSUdfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihORVhUSlNfVFNDT05GSUdfT1BUSU9OUz8uZXhjbHVkZSA/PyBbXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnRzY29uZmlnRGV2LmV4Y2x1ZGUsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihORVhUSlNfVFNDT05GSUdfT1BUSU9OUz8uaW5jbHVkZSA/PyBbXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnRzY29uZmlnRGV2LmluY2x1ZGUsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvcHRpb25zPy5uZXh0anNUc2NvbmZpZyA/PyB7fSxcbiAgICAgICAgICAgIF0pIGFzIFR5cGVzY3JpcHRDb25maWdPcHRpb25zLFxuICAgICAgICApO1xuXG4gICAgICAgIG5ldyBOb2RlMjBSZWFjdFR5cGVzY3JpcHRDb25maWd1cmVyKHRoaXMsIHtcbiAgICAgICAgICAgIHByb2plY3RUeXBlOiBcImFwcFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgbmV3IE5leHRqc0VzbGludCh0aGlzKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubmV4dGpzSmVzdCA/PyB0cnVlKSB7XG4gICAgICAgICAgICBuZXcgTmV4dGpzSmVzdENvbmZpZ0ZpbGUodGhpcywgb3B0aW9ucy5uZXh0anNKZXN0Q29uZmlnRmlsZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIG5ldyBOZXh0anNUYXNrcyh0aGlzKTtcbiAgICB9XG59XG4iXX0=