@uwmd/core 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -0
- package/dist/agents/bancroft.d.ts +32 -0
- package/dist/agents/bancroft.d.ts.map +1 -0
- package/dist/agents/bancroft.js +292 -0
- package/dist/agents/bancroft.js.map +1 -0
- package/dist/agents/schemas.d.ts +13 -0
- package/dist/agents/schemas.d.ts.map +1 -0
- package/dist/agents/schemas.js +74 -0
- package/dist/agents/schemas.js.map +1 -0
- package/dist/bindings.d.ts +85 -0
- package/dist/bindings.d.ts.map +1 -0
- package/dist/bindings.js +293 -0
- package/dist/bindings.js.map +1 -0
- package/dist/browser.d.ts +66 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +53 -0
- package/dist/browser.js.map +1 -0
- package/dist/calc/builtins.d.ts +4 -0
- package/dist/calc/builtins.d.ts.map +1 -0
- package/dist/calc/builtins.js +329 -0
- package/dist/calc/builtins.js.map +1 -0
- package/dist/calc/dependencies.d.ts +34 -0
- package/dist/calc/dependencies.d.ts.map +1 -0
- package/dist/calc/dependencies.js +101 -0
- package/dist/calc/dependencies.js.map +1 -0
- package/dist/calc/errors.d.ts +8 -0
- package/dist/calc/errors.d.ts.map +1 -0
- package/dist/calc/errors.js +18 -0
- package/dist/calc/errors.js.map +1 -0
- package/dist/calc/evaluator.d.ts +5 -0
- package/dist/calc/evaluator.d.ts.map +1 -0
- package/dist/calc/evaluator.js +184 -0
- package/dist/calc/evaluator.js.map +1 -0
- package/dist/calc/index.d.ts +14 -0
- package/dist/calc/index.d.ts.map +1 -0
- package/dist/calc/index.js +56 -0
- package/dist/calc/index.js.map +1 -0
- package/dist/calc/parser.d.ts +32 -0
- package/dist/calc/parser.d.ts.map +1 -0
- package/dist/calc/parser.js +361 -0
- package/dist/calc/parser.js.map +1 -0
- package/dist/cascade.d.ts +85 -0
- package/dist/cascade.d.ts.map +1 -0
- package/dist/cascade.js +172 -0
- package/dist/cascade.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +843 -0
- package/dist/cli.js.map +1 -0
- package/dist/codec.d.ts +25 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +62 -0
- package/dist/codec.js.map +1 -0
- package/dist/codecs.d.ts +6 -0
- package/dist/codecs.d.ts.map +1 -0
- package/dist/codecs.js +12 -0
- package/dist/codecs.js.map +1 -0
- package/dist/compactor.d.ts +11 -0
- package/dist/compactor.d.ts.map +1 -0
- package/dist/compactor.js +84 -0
- package/dist/compactor.js.map +1 -0
- package/dist/context-profiles.d.ts +30 -0
- package/dist/context-profiles.d.ts.map +1 -0
- package/dist/context-profiles.js +225 -0
- package/dist/context-profiles.js.map +1 -0
- package/dist/context.d.ts +55 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +288 -0
- package/dist/context.js.map +1 -0
- package/dist/dcf.d.ts +9 -0
- package/dist/dcf.d.ts.map +1 -0
- package/dist/dcf.js +75 -0
- package/dist/dcf.js.map +1 -0
- package/dist/debt.d.ts +11 -0
- package/dist/debt.d.ts.map +1 -0
- package/dist/debt.js +85 -0
- package/dist/debt.js.map +1 -0
- package/dist/defaults.d.ts +104 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +622 -0
- package/dist/defaults.js.map +1 -0
- package/dist/derived.d.ts +17 -0
- package/dist/derived.d.ts.map +1 -0
- package/dist/derived.js +29 -0
- package/dist/derived.js.map +1 -0
- package/dist/editor.d.ts +76 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +502 -0
- package/dist/editor.js.map +1 -0
- package/dist/envelope.d.ts +51 -0
- package/dist/envelope.d.ts.map +1 -0
- package/dist/envelope.js +213 -0
- package/dist/envelope.js.map +1 -0
- package/dist/format.d.ts +60 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +115 -0
- package/dist/format.js.map +1 -0
- package/dist/gaps.d.ts +62 -0
- package/dist/gaps.d.ts.map +1 -0
- package/dist/gaps.js +272 -0
- package/dist/gaps.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +15 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +169 -0
- package/dist/init.js.map +1 -0
- package/dist/integrity-canonical.d.ts +17 -0
- package/dist/integrity-canonical.d.ts.map +1 -0
- package/dist/integrity-canonical.js +124 -0
- package/dist/integrity-canonical.js.map +1 -0
- package/dist/integrity.d.ts +54 -0
- package/dist/integrity.d.ts.map +1 -0
- package/dist/integrity.js +244 -0
- package/dist/integrity.js.map +1 -0
- package/dist/modules.d.ts +24 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +322 -0
- package/dist/modules.js.map +1 -0
- package/dist/negotiation.d.ts +19 -0
- package/dist/negotiation.d.ts.map +1 -0
- package/dist/negotiation.js +70 -0
- package/dist/negotiation.js.map +1 -0
- package/dist/opstatement.d.ts +9 -0
- package/dist/opstatement.d.ts.map +1 -0
- package/dist/opstatement.js +80 -0
- package/dist/opstatement.js.map +1 -0
- package/dist/packs/excel-emit.d.ts +21 -0
- package/dist/packs/excel-emit.d.ts.map +1 -0
- package/dist/packs/excel-emit.js +135 -0
- package/dist/packs/excel-emit.js.map +1 -0
- package/dist/packs/index.d.ts +13 -0
- package/dist/packs/index.d.ts.map +1 -0
- package/dist/packs/index.js +37 -0
- package/dist/packs/index.js.map +1 -0
- package/dist/packs/industrial.d.ts +3 -0
- package/dist/packs/industrial.d.ts.map +1 -0
- package/dist/packs/industrial.js +115 -0
- package/dist/packs/industrial.js.map +1 -0
- package/dist/packs/multifamily.d.ts +3 -0
- package/dist/packs/multifamily.d.ts.map +1 -0
- package/dist/packs/multifamily.js +82 -0
- package/dist/packs/multifamily.js.map +1 -0
- package/dist/packs/office.d.ts +3 -0
- package/dist/packs/office.d.ts.map +1 -0
- package/dist/packs/office.js +108 -0
- package/dist/packs/office.js.map +1 -0
- package/dist/packs/retail.d.ts +3 -0
- package/dist/packs/retail.d.ts.map +1 -0
- package/dist/packs/retail.js +115 -0
- package/dist/packs/retail.js.map +1 -0
- package/dist/packs/self-storage.d.ts +3 -0
- package/dist/packs/self-storage.d.ts.map +1 -0
- package/dist/packs/self-storage.js +105 -0
- package/dist/packs/self-storage.js.map +1 -0
- package/dist/parser.d.ts +15 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +430 -0
- package/dist/parser.js.map +1 -0
- package/dist/protocol.d.ts +389 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +714 -0
- package/dist/protocol.js.map +1 -0
- package/dist/refinement.d.ts +63 -0
- package/dist/refinement.d.ts.map +1 -0
- package/dist/refinement.js +242 -0
- package/dist/refinement.js.map +1 -0
- package/dist/renderer.d.ts +22 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +478 -0
- package/dist/renderer.js.map +1 -0
- package/dist/rentroll.d.ts +21 -0
- package/dist/rentroll.d.ts.map +1 -0
- package/dist/rentroll.js +256 -0
- package/dist/rentroll.js.map +1 -0
- package/dist/report.d.ts +29 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +924 -0
- package/dist/report.js.map +1 -0
- package/dist/runner.d.ts +43 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +288 -0
- package/dist/runner.js.map +1 -0
- package/dist/sourcesuses.d.ts +14 -0
- package/dist/sourcesuses.d.ts.map +1 -0
- package/dist/sourcesuses.js +63 -0
- package/dist/sourcesuses.js.map +1 -0
- package/dist/types.d.ts +248 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/uwcsv.d.ts +23 -0
- package/dist/uwcsv.d.ts.map +1 -0
- package/dist/uwcsv.js +877 -0
- package/dist/uwcsv.js.map +1 -0
- package/dist/uwjson.d.ts +19 -0
- package/dist/uwjson.d.ts.map +1 -0
- package/dist/uwjson.js +61 -0
- package/dist/uwjson.js.map +1 -0
- package/dist/uwxml.d.ts +18 -0
- package/dist/uwxml.d.ts.map +1 -0
- package/dist/uwxml.js +297 -0
- package/dist/uwxml.js.map +1 -0
- package/dist/validator.d.ts +35 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +553 -0
- package/dist/validator.js.map +1 -0
- package/dist/valuation.d.ts +9 -0
- package/dist/valuation.d.ts.map +1 -0
- package/dist/valuation.js +34 -0
- package/dist/valuation.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// Canonical retail calc pack.
|
|
2
|
+
//
|
|
3
|
+
// Single source of truth for the retail derived metrics. Consumed by the web
|
|
4
|
+
// editor (via @uwmd/core/browser), the @uwmd/excel converter (via
|
|
5
|
+
// emitExcelFormula), conformance tests, and any future asset-class viewer.
|
|
6
|
+
// Add a metric here once and every tool picks it up.
|
|
7
|
+
//
|
|
8
|
+
// Each formula is a Tier-3 safe expression evaluable by `evaluateCalc()`
|
|
9
|
+
// against a parsed .uw.md file. Field paths reference the canonical retail
|
|
10
|
+
// schema (see UW_FORMAT_SPEC §4 and the Cactus Crossing example).
|
|
11
|
+
//
|
|
12
|
+
// Retail measures size in gross leasable area (`property.gross_leasable_area`)
|
|
13
|
+
// and occupancy in GLA (`rent_roll.occupied_gla` / `total_gla`). It adds an
|
|
14
|
+
// `expense_recovery_ratio` metric distinctive to NNN structures — the share of
|
|
15
|
+
// operating expenses recovered from tenants via reimbursements.
|
|
16
|
+
export const RETAIL_PACK = {
|
|
17
|
+
manifest_version: '1',
|
|
18
|
+
id: 'org.uwmd.pack.retail',
|
|
19
|
+
name: 'Retail Starter Pack',
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
description: 'Twelve derived metrics for retail underwriting: cap rate, LTV, LTC, DSCR, debt yield, $/sqft, loan/sqft, NOI/sqft, expense ratio, expense recovery ratio, cash-on-cash, occupancy.',
|
|
22
|
+
authors: ['UW Markdown Working Group'],
|
|
23
|
+
license: 'MIT',
|
|
24
|
+
requires_protocol: '^1.0.0',
|
|
25
|
+
requires_format: '^1.1.0',
|
|
26
|
+
requires_tier: 'tier-3-calc-host',
|
|
27
|
+
asset_classes: ['retail'],
|
|
28
|
+
calculations: [
|
|
29
|
+
{
|
|
30
|
+
id: 'cap_rate',
|
|
31
|
+
label: 'Cap Rate',
|
|
32
|
+
formula: 'noi_model.net_operating_income / valuation.purchase_price',
|
|
33
|
+
unit: '%',
|
|
34
|
+
deterministic: true,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'ltv',
|
|
38
|
+
label: 'LTV',
|
|
39
|
+
formula: 'debt_structure.loan_amount / valuation.purchase_price',
|
|
40
|
+
unit: '%',
|
|
41
|
+
deterministic: true,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: 'ltc',
|
|
45
|
+
label: 'LTC',
|
|
46
|
+
formula: 'debt_structure.loan_amount / sources_uses.uses.total',
|
|
47
|
+
unit: '%',
|
|
48
|
+
deterministic: true,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'dscr',
|
|
52
|
+
label: 'DSCR',
|
|
53
|
+
formula: 'noi_model.net_operating_income / debt_structure.annual_debt_service',
|
|
54
|
+
unit: 'x',
|
|
55
|
+
deterministic: true,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: 'debt_yield',
|
|
59
|
+
label: 'Debt Yield',
|
|
60
|
+
formula: 'noi_model.net_operating_income / debt_structure.loan_amount',
|
|
61
|
+
unit: '%',
|
|
62
|
+
deterministic: true,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'price_per_sqft',
|
|
66
|
+
label: 'Price / SqFt',
|
|
67
|
+
formula: 'valuation.purchase_price / property.gross_leasable_area',
|
|
68
|
+
unit: '$',
|
|
69
|
+
deterministic: true,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: 'loan_per_sqft',
|
|
73
|
+
label: 'Loan / SqFt',
|
|
74
|
+
formula: 'debt_structure.loan_amount / property.gross_leasable_area',
|
|
75
|
+
unit: '$',
|
|
76
|
+
deterministic: true,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'noi_per_sqft',
|
|
80
|
+
label: 'NOI / SqFt',
|
|
81
|
+
formula: 'noi_model.net_operating_income / property.gross_leasable_area',
|
|
82
|
+
unit: '$',
|
|
83
|
+
deterministic: true,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: 'expense_ratio',
|
|
87
|
+
label: 'Operating Expense Ratio',
|
|
88
|
+
formula: 'noi_model.expenses.total_operating_expenses / noi_model.income.effective_gross_income',
|
|
89
|
+
unit: '%',
|
|
90
|
+
deterministic: true,
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'expense_recovery_ratio',
|
|
94
|
+
label: 'Expense Recovery Ratio',
|
|
95
|
+
formula: 'noi_model.income.expense_reimbursements / noi_model.expenses.total_operating_expenses',
|
|
96
|
+
unit: '%',
|
|
97
|
+
deterministic: true,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: 'cash_on_cash',
|
|
101
|
+
label: 'Cash-on-Cash',
|
|
102
|
+
formula: '(noi_model.net_operating_income - debt_structure.annual_debt_service) / sources_uses.sources.sponsor_equity',
|
|
103
|
+
unit: '%',
|
|
104
|
+
deterministic: true,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'occupancy',
|
|
108
|
+
label: 'Occupancy',
|
|
109
|
+
formula: 'rent_roll.occupied_gla / rent_roll.total_gla',
|
|
110
|
+
unit: '%',
|
|
111
|
+
deterministic: true,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=retail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retail.js","sourceRoot":"","sources":["../../src/packs/retail.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,6EAA6E;AAC7E,kEAAkE;AAClE,2EAA2E;AAC3E,qDAAqD;AACrD,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,kEAAkE;AAClE,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,gEAAgE;AAIhE,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,gBAAgB,EAAE,GAAG;IACrB,EAAE,EAAE,sBAAsB;IAC1B,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,OAAO;IAChB,WAAW,EACT,oLAAoL;IACtL,OAAO,EAAE,CAAC,2BAA2B,CAAC;IACtC,OAAO,EAAE,KAAK;IACd,iBAAiB,EAAE,QAAQ;IAC3B,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,kBAAkB;IACjC,aAAa,EAAE,CAAC,QAAQ,CAAC;IACzB,YAAY,EAAE;QACZ;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,uDAAuD;YAChE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,qEAAqE;YAC9E,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,6DAA6D;YACtE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,yDAAyD;YAClE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,+DAA+D;YACxE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EACL,uFAAuF;YACzF,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,wBAAwB;YAC5B,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EACL,uFAAuF;YACzF,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,cAAc;YACrB,OAAO,EACL,6GAA6G;YAC/G,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,8CAA8C;YACvD,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-storage.d.ts","sourceRoot":"","sources":["../../src/packs/self-storage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,iBAAiB,EAAE,cAqG/B,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// Canonical self-storage calc pack.
|
|
2
|
+
//
|
|
3
|
+
// Single source of truth for self-storage derived metrics. The class-specific
|
|
4
|
+
// fields are net rentable square feet, rentable units, and both physical and
|
|
5
|
+
// economic occupancy.
|
|
6
|
+
export const SELF_STORAGE_PACK = {
|
|
7
|
+
manifest_version: '1',
|
|
8
|
+
id: 'org.uwmd.pack.self_storage',
|
|
9
|
+
name: 'Self-Storage Starter Pack',
|
|
10
|
+
version: '1.0.0',
|
|
11
|
+
description: 'Twelve derived metrics for self-storage underwriting: cap rate, LTV, LTC, DSCR, debt yield, $/NRSF, loan/NRSF, NOI/NRSF, expense ratio, cash-on-cash, physical occupancy, and economic occupancy.',
|
|
12
|
+
authors: ['UW Markdown Working Group'],
|
|
13
|
+
license: 'MIT',
|
|
14
|
+
requires_protocol: '^1.0.0',
|
|
15
|
+
requires_format: '^1.1.0',
|
|
16
|
+
requires_tier: 'tier-3-calc-host',
|
|
17
|
+
asset_classes: ['self_storage'],
|
|
18
|
+
calculations: [
|
|
19
|
+
{
|
|
20
|
+
id: 'cap_rate',
|
|
21
|
+
label: 'Cap Rate',
|
|
22
|
+
formula: 'noi_model.net_operating_income / valuation.purchase_price',
|
|
23
|
+
unit: '%',
|
|
24
|
+
deterministic: true,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'ltv',
|
|
28
|
+
label: 'LTV',
|
|
29
|
+
formula: 'debt_structure.loan_amount / valuation.purchase_price',
|
|
30
|
+
unit: '%',
|
|
31
|
+
deterministic: true,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 'ltc',
|
|
35
|
+
label: 'LTC',
|
|
36
|
+
formula: 'debt_structure.loan_amount / sources_uses.uses.total',
|
|
37
|
+
unit: '%',
|
|
38
|
+
deterministic: true,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'dscr',
|
|
42
|
+
label: 'DSCR',
|
|
43
|
+
formula: 'noi_model.net_operating_income / debt_structure.annual_debt_service',
|
|
44
|
+
unit: 'x',
|
|
45
|
+
deterministic: true,
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'debt_yield',
|
|
49
|
+
label: 'Debt Yield',
|
|
50
|
+
formula: 'noi_model.net_operating_income / debt_structure.loan_amount',
|
|
51
|
+
unit: '%',
|
|
52
|
+
deterministic: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 'price_per_nrsf',
|
|
56
|
+
label: 'Price / NRSF',
|
|
57
|
+
formula: 'valuation.purchase_price / property.net_rentable_square_feet',
|
|
58
|
+
unit: '$',
|
|
59
|
+
deterministic: true,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'loan_per_nrsf',
|
|
63
|
+
label: 'Loan / NRSF',
|
|
64
|
+
formula: 'debt_structure.loan_amount / property.net_rentable_square_feet',
|
|
65
|
+
unit: '$',
|
|
66
|
+
deterministic: true,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'noi_per_nrsf',
|
|
70
|
+
label: 'NOI / NRSF',
|
|
71
|
+
formula: 'noi_model.net_operating_income / property.net_rentable_square_feet',
|
|
72
|
+
unit: '$',
|
|
73
|
+
deterministic: true,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: 'expense_ratio',
|
|
77
|
+
label: 'Operating Expense Ratio',
|
|
78
|
+
formula: 'noi_model.expenses.total_operating_expenses / noi_model.income.effective_gross_income',
|
|
79
|
+
unit: '%',
|
|
80
|
+
deterministic: true,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'cash_on_cash',
|
|
84
|
+
label: 'Cash-on-Cash',
|
|
85
|
+
formula: '(noi_model.net_operating_income - debt_structure.annual_debt_service) / sources_uses.sources.sponsor_equity',
|
|
86
|
+
unit: '%',
|
|
87
|
+
deterministic: true,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: 'physical_occupancy',
|
|
91
|
+
label: 'Physical Occupancy',
|
|
92
|
+
formula: 'rent_roll.occupied_units / property.rentable_units',
|
|
93
|
+
unit: '%',
|
|
94
|
+
deterministic: true,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 'economic_occupancy',
|
|
98
|
+
label: 'Economic Occupancy',
|
|
99
|
+
formula: 'noi_model.income.effective_gross_income / noi_model.income.gross_potential_rent',
|
|
100
|
+
unit: '%',
|
|
101
|
+
deterministic: true,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=self-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-storage.js","sourceRoot":"","sources":["../../src/packs/self-storage.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,sBAAsB;AAItB,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,gBAAgB,EAAE,GAAG;IACrB,EAAE,EAAE,4BAA4B;IAChC,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,OAAO;IAChB,WAAW,EACT,mMAAmM;IACrM,OAAO,EAAE,CAAC,2BAA2B,CAAC;IACtC,OAAO,EAAE,KAAK;IACd,iBAAiB,EAAE,QAAQ;IAC3B,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,kBAAkB;IACjC,aAAa,EAAE,CAAC,cAAc,CAAC;IAC/B,YAAY,EAAE;QACZ;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,uDAAuD;YAChE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,qEAAqE;YAC9E,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,6DAA6D;YACtE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,8DAA8D;YACvE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,gEAAgE;YACzE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,oEAAoE;YAC7E,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EACL,uFAAuF;YACzF,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,cAAc;YACrB,OAAO,EACL,6GAA6G;YAC/G,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,oDAAoD;YAC7D,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,iFAAiF;YAC1F,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;KACF;CACF,CAAC"}
|
package/dist/parser.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UWBlock, ParsedUWFile, ParseOptions } from './types.js';
|
|
2
|
+
export declare class UWMDParseError extends Error {
|
|
3
|
+
readonly code: string;
|
|
4
|
+
readonly line?: number;
|
|
5
|
+
readonly feature?: string;
|
|
6
|
+
constructor(code: string, message: string, opts?: {
|
|
7
|
+
line?: number;
|
|
8
|
+
feature?: string;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export declare function parseUWFile(content: string, options?: ParseOptions): ParsedUWFile;
|
|
12
|
+
export declare function getSection(parsed: ParsedUWFile, sectionId: string): UWBlock | null;
|
|
13
|
+
export declare function getSectionVariant(parsed: ParsedUWFile, sectionId: string, variant: string): UWBlock | null;
|
|
14
|
+
export declare function deepGet(obj: unknown, path: string): unknown;
|
|
15
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,OAAO,EAIP,YAAY,EAEZ,YAAY,EAEb,MAAM,YAAY,CAAC;AAsDpB,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;CAO1F;AAmJD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,YAAY,CAqHrF;AAwGD,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAKlF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,GAAG,IAAI,CAIhB;AAMD,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ3D"}
|