UNPKG

projen

Version:

CDK for software projects

50 lines 6.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.COMPONENT_SYMBOL = exports.PROJECT_SYMBOL = void 0; exports.tryFindClosest = tryFindClosest; exports.findClosestProject = findClosestProject; exports.isProject = isProject; exports.isComponent = isComponent; exports.tagAsProject = tagAsProject; exports.tagAsComponent = tagAsComponent; exports.PROJECT_SYMBOL = Symbol.for("projen.Project"); exports.COMPONENT_SYMBOL = Symbol.for("projen.Component"); /** * Create a function to find the closest construct matching a predicate * @param predicate * @returns A function to find the closest construct matching the predicate */ function tryFindClosest(predicate) { return (construct) => construct?.node.scopes.reverse().find(predicate); } /** * Create a function to find the closest construct matching a predicate * @param predicate * @returns A function to find the closest construct matching the predicate */ function findClosestProject(construct) { if (isComponent(construct)) { return construct.project; } const project = tryFindClosest(isProject)(construct); if (!project) { throw new Error(`${new.target.name} at '${construct.node.path}' must be created in the scope of a Project, but no Project was found`); } return project; } function isProject(x) { return x !== null && typeof x === "object" && exports.PROJECT_SYMBOL in x; } function isComponent(x) { return x !== null && typeof x === "object" && exports.COMPONENT_SYMBOL in x; } function tagAs(scope, tag) { Object.defineProperty(scope, tag, { value: true }); } function tagAsProject(scope) { tagAs(scope, exports.PROJECT_SYMBOL); } function tagAsComponent(scope) { tagAs(scope, exports.COMPONENT_SYMBOL); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2NvbnN0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBWUEsd0NBS0M7QUFPRCxnREFlQztBQUVELDhCQUVDO0FBRUQsa0NBRUM7QUFNRCxvQ0FFQztBQUVELHdDQUVDO0FBdkRZLFFBQUEsY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM5QyxRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUUvRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixTQUE2QjtJQUU3QixPQUFPLENBQUMsU0FBc0IsRUFBRSxFQUFFLENBQ2hDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFNBQXFCO0lBQ3RELElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQ2pCLHVFQUF1RSxDQUN4RSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFnQixTQUFTLENBQUMsQ0FBVTtJQUNsQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLHNCQUFjLElBQUksQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQUMsQ0FBVTtJQUNwQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLHdCQUFnQixJQUFJLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBaUIsRUFBRSxHQUFXO0lBQzNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsS0FBaUI7SUFDNUMsS0FBSyxDQUFDLEtBQUssRUFBRSxzQkFBYyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUFpQjtJQUM5QyxLQUFLLENBQUMsS0FBSyxFQUFFLHdCQUFnQixDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5cbmV4cG9ydCBjb25zdCBQUk9KRUNUX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJwcm9qZW4uUHJvamVjdFwiKTtcbmV4cG9ydCBjb25zdCBDT01QT05FTlRfU1lNQk9MID0gU3ltYm9sLmZvcihcInByb2plbi5Db21wb25lbnRcIik7XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gdG8gZmluZCB0aGUgY2xvc2VzdCBjb25zdHJ1Y3QgbWF0Y2hpbmcgYSBwcmVkaWNhdGVcbiAqIEBwYXJhbSBwcmVkaWNhdGVcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gZmluZCB0aGUgY2xvc2VzdCBjb25zdHJ1Y3QgbWF0Y2hpbmcgdGhlIHByZWRpY2F0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ5RmluZENsb3Nlc3Q8VCBleHRlbmRzIElDb25zdHJ1Y3Q+KFxuICBwcmVkaWNhdGU6ICh4OiBhbnkpID0+IHggaXMgVFxuKTogKGNvbnN0cnVjdD86IElDb25zdHJ1Y3QpID0+IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKGNvbnN0cnVjdD86IElDb25zdHJ1Y3QpID0+XG4gICAgY29uc3RydWN0Py5ub2RlLnNjb3Blcy5yZXZlcnNlKCkuZmluZChwcmVkaWNhdGUpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNsb3Nlc3QgY29uc3RydWN0IG1hdGNoaW5nIGEgcHJlZGljYXRlXG4gKiBAcGFyYW0gcHJlZGljYXRlXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNsb3Nlc3QgY29uc3RydWN0IG1hdGNoaW5nIHRoZSBwcmVkaWNhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDbG9zZXN0UHJvamVjdChjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QpOiBQcm9qZWN0IHtcbiAgaWYgKGlzQ29tcG9uZW50KGNvbnN0cnVjdCkpIHtcbiAgICByZXR1cm4gY29uc3RydWN0LnByb2plY3Q7XG4gIH1cblxuICBjb25zdCBwcm9qZWN0ID0gdHJ5RmluZENsb3Nlc3QoaXNQcm9qZWN0KShjb25zdHJ1Y3QpO1xuICBpZiAoIXByb2plY3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtuZXcudGFyZ2V0Lm5hbWV9IGF0ICcke1xuICAgICAgICBjb25zdHJ1Y3Qubm9kZS5wYXRoXG4gICAgICB9JyBtdXN0IGJlIGNyZWF0ZWQgaW4gdGhlIHNjb3BlIG9mIGEgUHJvamVjdCwgYnV0IG5vIFByb2plY3Qgd2FzIGZvdW5kYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcHJvamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvamVjdCh4OiB1bmtub3duKTogeCBpcyBQcm9qZWN0IHtcbiAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgUFJPSkVDVF9TWU1CT0wgaW4geDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50KHg6IHVua25vd24pOiB4IGlzIENvbXBvbmVudCB7XG4gIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiICYmIENPTVBPTkVOVF9TWU1CT0wgaW4geDtcbn1cblxuZnVuY3Rpb24gdGFnQXMoc2NvcGU6IElDb25zdHJ1Y3QsIHRhZzogc3ltYm9sKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzY29wZSwgdGFnLCB7IHZhbHVlOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnQXNQcm9qZWN0KHNjb3BlOiBJQ29uc3RydWN0KSB7XG4gIHRhZ0FzKHNjb3BlLCBQUk9KRUNUX1NZTUJPTCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdBc0NvbXBvbmVudChzY29wZTogSUNvbnN0cnVjdCkge1xuICB0YWdBcyhzY29wZSwgQ09NUE9ORU5UX1NZTUJPTCk7XG59XG4iXX0=