@embroider/compat 2.1.1-unstable.21eae41 → 2.1.1-unstable.73213f2a
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/package.json +3 -3
- package/src/audit/capture.d.ts +8 -0
- package/src/audit/capture.js +45 -0
- package/src/audit/capture.js.map +1 -0
- package/src/audit-cli.js +0 -0
- package/src/resolver.d.ts +128 -0
- package/src/resolver.js +677 -0
- package/src/resolver.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embroider/compat",
|
|
3
|
-
"version": "2.1.1-unstable.
|
|
3
|
+
"version": "2.1.1-unstable.73213f2a",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Backward compatibility layer for the Embroider build system.",
|
|
6
6
|
"repository": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
|
29
29
|
"@babel/preset-env": "^7.14.5",
|
|
30
30
|
"@babel/traverse": "^7.14.5",
|
|
31
|
-
"@embroider/macros": "1.10.0-unstable.
|
|
31
|
+
"@embroider/macros": "1.10.0-unstable.73213f2a",
|
|
32
32
|
"@types/babel__code-frame": "^7.0.2",
|
|
33
33
|
"@types/yargs": "^17.0.3",
|
|
34
34
|
"assert-never": "^1.1.0",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"typescript": "*"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
86
|
-
"@embroider/core": "2.1.1-unstable.
|
|
86
|
+
"@embroider/core": "2.1.1-unstable.73213f2a"
|
|
87
87
|
},
|
|
88
88
|
"engines": {
|
|
89
89
|
"node": "12.* || 14.* || >= 16"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Writable } from 'stream';
|
|
3
|
+
export declare class CaptureStream extends Writable {
|
|
4
|
+
private gather;
|
|
5
|
+
_write(chunk: string | Buffer, _encoding: string, callback: (err?: any) => void): void;
|
|
6
|
+
log(msg: string, ...args: any[]): void;
|
|
7
|
+
get output(): string;
|
|
8
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CaptureStream = void 0;
|
|
13
|
+
const bind_decorator_1 = __importDefault(require("bind-decorator"));
|
|
14
|
+
const stream_1 = require("stream");
|
|
15
|
+
const util_1 = require("util");
|
|
16
|
+
class CaptureStream extends stream_1.Writable {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.gather = [];
|
|
20
|
+
}
|
|
21
|
+
_write(chunk, _encoding, callback) {
|
|
22
|
+
this.gather.push(chunk);
|
|
23
|
+
callback();
|
|
24
|
+
}
|
|
25
|
+
log(msg, ...args) {
|
|
26
|
+
this.gather.push((0, util_1.format)(msg, ...args));
|
|
27
|
+
}
|
|
28
|
+
get output() {
|
|
29
|
+
return this.gather
|
|
30
|
+
.map(element => {
|
|
31
|
+
if (typeof element === 'string') {
|
|
32
|
+
return element;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return element.toString('utf8');
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
.join('');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
__decorate([
|
|
42
|
+
bind_decorator_1.default
|
|
43
|
+
], CaptureStream.prototype, "log", null);
|
|
44
|
+
exports.CaptureStream = CaptureStream;
|
|
45
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["capture.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAAkC;AAClC,mCAAkC;AAClC,+BAA8B;AAE9B,MAAa,aAAc,SAAQ,iBAAQ;IAA3C;;QACU,WAAM,GAAG,EAAyB,CAAC;IAsB7C,CAAC;IArBC,MAAM,CAAC,KAAsB,EAAE,SAAiB,EAAE,QAA6B;QAC7E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,QAAQ,EAAE,CAAC;IACb,CAAC;IAGD,GAAG,CAAC,GAAW,EAAE,GAAG,IAAW;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAA,aAAM,EAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM;aACf,GAAG,CAAC,OAAO,CAAC,EAAE;YACb,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,OAAO,OAAO,CAAC;aAChB;iBAAM;gBACL,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACjC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;CACF;AAfC;IADC,wBAAI;wCAGJ;AAVH,sCAuBC","sourcesContent":["import bind from 'bind-decorator';\nimport { Writable } from 'stream';\nimport { format } from 'util';\n\nexport class CaptureStream extends Writable {\n private gather = [] as (string | Buffer)[];\n _write(chunk: string | Buffer, _encoding: string, callback: (err?: any) => void) {\n this.gather.push(chunk);\n callback();\n }\n\n @bind\n log(msg: string, ...args: any[]) {\n this.gather.push(format(msg, ...args));\n }\n\n get output(): string {\n return this.gather\n .map(element => {\n if (typeof element === 'string') {\n return element;\n } else {\n return element.toString('utf8');\n }\n })\n .join('');\n }\n}\n"]}
|
package/src/audit-cli.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { ActivePackageRules, ComponentRules, ModuleRules, PackageRules } from './dependency-rules';
|
|
2
|
+
import { Options as AdjustImportsOptions } from '@embroider/core/src/babel-plugin-adjust-imports';
|
|
3
|
+
import Options from './options';
|
|
4
|
+
export interface ResolvedDep {
|
|
5
|
+
runtimeName: string;
|
|
6
|
+
path: string;
|
|
7
|
+
absPath: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ComponentResolution {
|
|
10
|
+
type: 'component';
|
|
11
|
+
jsModule: ResolvedDep | null;
|
|
12
|
+
hbsModule: ResolvedDep | null;
|
|
13
|
+
yieldsComponents: Required<ComponentRules>['yieldsSafeComponents'];
|
|
14
|
+
yieldsArguments: Required<ComponentRules>['yieldsArguments'];
|
|
15
|
+
argumentsAreComponents: string[];
|
|
16
|
+
nameHint: string;
|
|
17
|
+
}
|
|
18
|
+
export interface HelperResolution {
|
|
19
|
+
type: 'helper';
|
|
20
|
+
module: ResolvedDep;
|
|
21
|
+
nameHint: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ModifierResolution {
|
|
24
|
+
type: 'modifier';
|
|
25
|
+
module: ResolvedDep;
|
|
26
|
+
nameHint: string;
|
|
27
|
+
}
|
|
28
|
+
export declare type ResolutionResult = ComponentResolution | HelperResolution | ModifierResolution;
|
|
29
|
+
export interface ResolutionFail {
|
|
30
|
+
type: 'error';
|
|
31
|
+
message: string;
|
|
32
|
+
detail: string;
|
|
33
|
+
loc: Loc;
|
|
34
|
+
}
|
|
35
|
+
export declare type Resolution = ResolutionResult | ResolutionFail;
|
|
36
|
+
export interface Loc {
|
|
37
|
+
start: {
|
|
38
|
+
line: number;
|
|
39
|
+
column: number;
|
|
40
|
+
};
|
|
41
|
+
end: {
|
|
42
|
+
line: number;
|
|
43
|
+
column: number;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
declare type ResolverOptions = Pick<Required<Options>, 'staticHelpers' | 'staticModifiers' | 'staticComponents' | 'allowUnsafeDynamicComponents'>;
|
|
47
|
+
interface RehydrationParamsBase {
|
|
48
|
+
root: string;
|
|
49
|
+
modulePrefix: string;
|
|
50
|
+
podModulePrefix?: string;
|
|
51
|
+
options: ResolverOptions;
|
|
52
|
+
emberVersion: string;
|
|
53
|
+
activePackageRules: ActivePackageRules[];
|
|
54
|
+
}
|
|
55
|
+
interface RehydrationParamsWithFile extends RehydrationParamsBase {
|
|
56
|
+
adjustImportsOptionsPath: string;
|
|
57
|
+
}
|
|
58
|
+
interface RehydrationParamsWithOptions extends RehydrationParamsBase {
|
|
59
|
+
adjustImportsOptions: AdjustImportsOptions;
|
|
60
|
+
}
|
|
61
|
+
declare type RehydrationParams = RehydrationParamsWithFile | RehydrationParamsWithOptions;
|
|
62
|
+
export declare function rehydrate(params: RehydrationParams): CompatResolver;
|
|
63
|
+
export interface AuditMessage {
|
|
64
|
+
message: string;
|
|
65
|
+
detail: string;
|
|
66
|
+
loc: Loc;
|
|
67
|
+
source: string;
|
|
68
|
+
filename: string;
|
|
69
|
+
}
|
|
70
|
+
export default class CompatResolver {
|
|
71
|
+
private params;
|
|
72
|
+
private auditHandler;
|
|
73
|
+
_parallelBabel: {
|
|
74
|
+
requireFile: string;
|
|
75
|
+
buildUsing: string;
|
|
76
|
+
params: RehydrationParams;
|
|
77
|
+
};
|
|
78
|
+
constructor(params: RehydrationParams);
|
|
79
|
+
private findComponentRules;
|
|
80
|
+
private isIgnoredComponent;
|
|
81
|
+
get adjustImportsOptions(): AdjustImportsOptions;
|
|
82
|
+
private get rules();
|
|
83
|
+
resolveComponentSnippet(snippet: string, rule: PackageRules | ModuleRules, from?: string): ComponentResolution;
|
|
84
|
+
private standardDasherize;
|
|
85
|
+
astTransformer(): undefined | string | [string, unknown];
|
|
86
|
+
private humanReadableFile;
|
|
87
|
+
reportError(dep: ResolutionFail, filename: string, source: string): void;
|
|
88
|
+
resolveImport(path: string, from: string): {
|
|
89
|
+
runtimeName: string;
|
|
90
|
+
absPath: string;
|
|
91
|
+
} | undefined;
|
|
92
|
+
private get resolvableExtensionsPattern();
|
|
93
|
+
private absPathToRuntimePath;
|
|
94
|
+
absPathToRuntimeName(absPath: string, owningPackage?: {
|
|
95
|
+
root: string;
|
|
96
|
+
name: string;
|
|
97
|
+
}): string;
|
|
98
|
+
private get staticComponentsEnabled();
|
|
99
|
+
private get staticHelpersEnabled();
|
|
100
|
+
private get staticModifiersEnabled();
|
|
101
|
+
private tryHelper;
|
|
102
|
+
private _tryHelper;
|
|
103
|
+
private tryModifier;
|
|
104
|
+
private _tryModifier;
|
|
105
|
+
private get appPackage();
|
|
106
|
+
private tryComponent;
|
|
107
|
+
private _tryComponent;
|
|
108
|
+
resolveSubExpression(path: string, from: string, loc: Loc): HelperResolution | ResolutionFail | null;
|
|
109
|
+
resolveMustache(path: string, hasArgs: boolean, from: string, loc: Loc): HelperResolution | ComponentResolution | ResolutionFail | null;
|
|
110
|
+
resolveElementModifierStatement(path: string, from: string, loc: Loc): ModifierResolution | ResolutionFail | null;
|
|
111
|
+
resolveElement(tagName: string, from: string, loc: Loc): ComponentResolution | ResolutionFail | null;
|
|
112
|
+
resolveComponentHelper(component: ComponentLocator, from: string, loc: Loc, impliedBecause?: {
|
|
113
|
+
componentName: string;
|
|
114
|
+
argumentName: string;
|
|
115
|
+
}): ComponentResolution | ResolutionFail | null;
|
|
116
|
+
resolveDynamicHelper(helper: ComponentLocator, from: string, loc: Loc): HelperResolution | ResolutionFail | null;
|
|
117
|
+
resolveDynamicModifier(modifier: ComponentLocator, from: string, loc: Loc): ModifierResolution | ResolutionFail | null;
|
|
118
|
+
}
|
|
119
|
+
export declare type ComponentLocator = {
|
|
120
|
+
type: 'literal';
|
|
121
|
+
path: string;
|
|
122
|
+
} | {
|
|
123
|
+
type: 'path';
|
|
124
|
+
path: string;
|
|
125
|
+
} | {
|
|
126
|
+
type: 'other';
|
|
127
|
+
};
|
|
128
|
+
export {};
|
package/src/resolver.js
ADDED
|
@@ -0,0 +1,677 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.rehydrate = void 0;
|
|
13
|
+
const dependency_rules_1 = require("./dependency-rules");
|
|
14
|
+
const core_1 = require("@embroider/core");
|
|
15
|
+
const path_1 = require("path");
|
|
16
|
+
const typescript_memoize_1 = require("typescript-memoize");
|
|
17
|
+
const dasherize_component_name_1 = require("./dasherize-component-name");
|
|
18
|
+
const fs_extra_1 = require("fs-extra");
|
|
19
|
+
const resolve_1 = __importDefault(require("resolve"));
|
|
20
|
+
const semver_1 = __importDefault(require("semver"));
|
|
21
|
+
// TODO: this depends on the ember version. And it's probably missing some
|
|
22
|
+
// private-but-used values.
|
|
23
|
+
const builtInHelpers = [
|
|
24
|
+
'-get-dynamic-var',
|
|
25
|
+
'-in-element',
|
|
26
|
+
'in-element',
|
|
27
|
+
'-with-dynamic-vars',
|
|
28
|
+
'action',
|
|
29
|
+
'array',
|
|
30
|
+
'component',
|
|
31
|
+
'concat',
|
|
32
|
+
'debugger',
|
|
33
|
+
'each',
|
|
34
|
+
'each-in',
|
|
35
|
+
'fn',
|
|
36
|
+
'get',
|
|
37
|
+
'has-block',
|
|
38
|
+
'has-block-params',
|
|
39
|
+
'hasBlock',
|
|
40
|
+
'hasBlockParams',
|
|
41
|
+
'hash',
|
|
42
|
+
'helper',
|
|
43
|
+
'if',
|
|
44
|
+
'input',
|
|
45
|
+
'let',
|
|
46
|
+
'link-to',
|
|
47
|
+
'loc',
|
|
48
|
+
'log',
|
|
49
|
+
'modifier',
|
|
50
|
+
'mount',
|
|
51
|
+
'mut',
|
|
52
|
+
'on',
|
|
53
|
+
'outlet',
|
|
54
|
+
'partial',
|
|
55
|
+
'query-params',
|
|
56
|
+
'readonly',
|
|
57
|
+
'textarea',
|
|
58
|
+
'unbound',
|
|
59
|
+
'unique-id',
|
|
60
|
+
'unless',
|
|
61
|
+
'with',
|
|
62
|
+
'yield',
|
|
63
|
+
];
|
|
64
|
+
const builtInComponents = ['input', 'link-to', 'textarea'];
|
|
65
|
+
const builtInModifiers = ['action', 'on'];
|
|
66
|
+
function extractOptions(options) {
|
|
67
|
+
return {
|
|
68
|
+
staticHelpers: options.staticHelpers,
|
|
69
|
+
staticModifiers: options.staticModifiers,
|
|
70
|
+
staticComponents: options.staticComponents,
|
|
71
|
+
allowUnsafeDynamicComponents: options.allowUnsafeDynamicComponents,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function rehydrate(params) {
|
|
75
|
+
return new CompatResolver(params);
|
|
76
|
+
}
|
|
77
|
+
exports.rehydrate = rehydrate;
|
|
78
|
+
class CompatResolver {
|
|
79
|
+
constructor(params) {
|
|
80
|
+
this.params = params;
|
|
81
|
+
this.params.options = extractOptions(this.params.options);
|
|
82
|
+
this._parallelBabel = {
|
|
83
|
+
requireFile: __filename,
|
|
84
|
+
buildUsing: 'rehydrate',
|
|
85
|
+
params,
|
|
86
|
+
};
|
|
87
|
+
if (globalThis.embroider_audit) {
|
|
88
|
+
this.auditHandler = globalThis.embroider_audit;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
findComponentRules(absPath) {
|
|
92
|
+
let rules = this.rules.components.get(absPath);
|
|
93
|
+
if (rules) {
|
|
94
|
+
return rules;
|
|
95
|
+
}
|
|
96
|
+
// co-located templates aren't visible to the resolver, because they never
|
|
97
|
+
// get resolved from a template (they are always handled directly by the
|
|
98
|
+
// corresponding JS module, which the resolver *does* see). This means their
|
|
99
|
+
// paths won't ever be in `this.rules.components`. But we do want them to
|
|
100
|
+
// "inherit" the rules that are attached to their corresonding JS module.
|
|
101
|
+
if (absPath.endsWith('.hbs')) {
|
|
102
|
+
let stem = absPath.slice(0, -4);
|
|
103
|
+
for (let ext of this.adjustImportsOptions.resolvableExtensions) {
|
|
104
|
+
if (ext !== '.hbs') {
|
|
105
|
+
let rules = this.rules.components.get(stem + ext);
|
|
106
|
+
if (rules) {
|
|
107
|
+
return rules;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
isIgnoredComponent(dasherizedName) {
|
|
115
|
+
return this.rules.ignoredComponents.includes(dasherizedName);
|
|
116
|
+
}
|
|
117
|
+
get adjustImportsOptions() {
|
|
118
|
+
const { params } = this;
|
|
119
|
+
return 'adjustImportsOptionsPath' in params
|
|
120
|
+
? // eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
121
|
+
require(params.adjustImportsOptionsPath)
|
|
122
|
+
: params.adjustImportsOptions;
|
|
123
|
+
}
|
|
124
|
+
get rules() {
|
|
125
|
+
var _a;
|
|
126
|
+
// keyed by their first resolved dependency's runtimeName.
|
|
127
|
+
let components = new Map();
|
|
128
|
+
// keyed by our own dasherized interpretation of the component's name.
|
|
129
|
+
let ignoredComponents = [];
|
|
130
|
+
// we're not responsible for filtering out rules for inactive packages here,
|
|
131
|
+
// that is done before getting to us. So we should assume these are all in
|
|
132
|
+
// force.
|
|
133
|
+
for (let rule of this.params.activePackageRules) {
|
|
134
|
+
if (rule.components) {
|
|
135
|
+
for (let [snippet, componentRules] of Object.entries(rule.components)) {
|
|
136
|
+
if (componentRules.safeToIgnore) {
|
|
137
|
+
ignoredComponents.push(this.standardDasherize(snippet, rule));
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
let resolvedSnippet = this.resolveComponentSnippet(snippet, rule);
|
|
141
|
+
// cast is OK here because a component must have one or the other
|
|
142
|
+
let resolvedDep = ((_a = resolvedSnippet.hbsModule) !== null && _a !== void 0 ? _a : resolvedSnippet.jsModule);
|
|
143
|
+
let processedRules = (0, dependency_rules_1.preprocessComponentRule)(componentRules);
|
|
144
|
+
// we always register our rules on the component's own first resolved
|
|
145
|
+
// module, which must be a module in the app's module namespace.
|
|
146
|
+
components.set(resolvedDep.absPath, processedRules);
|
|
147
|
+
// if there's a custom layout, we also need to register our rules on
|
|
148
|
+
// those templates.
|
|
149
|
+
if (componentRules.layout) {
|
|
150
|
+
if (componentRules.layout.appPath) {
|
|
151
|
+
components.set((0, path_1.join)(this.params.root, componentRules.layout.appPath), processedRules);
|
|
152
|
+
}
|
|
153
|
+
else if (componentRules.layout.addonPath) {
|
|
154
|
+
for (let root of rule.roots) {
|
|
155
|
+
components.set((0, path_1.join)(root, componentRules.layout.addonPath), processedRules);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
throw new Error(`layout property in component rule must contain either appPath or addonPath: ${JSON.stringify(rule, null, 2)}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (rule.appTemplates) {
|
|
165
|
+
for (let [path, templateRules] of Object.entries(rule.appTemplates)) {
|
|
166
|
+
let processedRules = (0, dependency_rules_1.preprocessComponentRule)(templateRules);
|
|
167
|
+
components.set((0, path_1.join)(this.params.root, path), processedRules);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (rule.addonTemplates) {
|
|
171
|
+
for (let [path, templateRules] of Object.entries(rule.addonTemplates)) {
|
|
172
|
+
let processedRules = (0, dependency_rules_1.preprocessComponentRule)(templateRules);
|
|
173
|
+
for (let root of rule.roots) {
|
|
174
|
+
components.set((0, path_1.join)(root, path), processedRules);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return { components, ignoredComponents };
|
|
180
|
+
}
|
|
181
|
+
resolveComponentSnippet(snippet, rule, from = 'rule-snippet.hbs') {
|
|
182
|
+
let name = this.standardDasherize(snippet, rule);
|
|
183
|
+
let found = this.tryComponent(name, from, false);
|
|
184
|
+
if (found && found.type === 'component') {
|
|
185
|
+
return found;
|
|
186
|
+
}
|
|
187
|
+
throw new Error(`unable to locate component ${snippet} referred to in rule ${JSON.stringify(rule, null, 2)}`);
|
|
188
|
+
}
|
|
189
|
+
standardDasherize(snippet, rule) {
|
|
190
|
+
let name = (0, dasherize_component_name_1.snippetToDasherizedName)(snippet);
|
|
191
|
+
if (name == null) {
|
|
192
|
+
throw new Error(`unable to parse component snippet "${snippet}" from rule ${JSON.stringify(rule, null, 2)}`);
|
|
193
|
+
}
|
|
194
|
+
return name;
|
|
195
|
+
}
|
|
196
|
+
astTransformer() {
|
|
197
|
+
if (this.staticComponentsEnabled || this.staticHelpersEnabled || this.staticModifiersEnabled) {
|
|
198
|
+
let opts = {
|
|
199
|
+
resolver: this,
|
|
200
|
+
// lexical invocation of helpers was not reliable before Ember 4.2 due to https://github.com/emberjs/ember.js/pull/19878
|
|
201
|
+
patchHelpersBug: semver_1.default.satisfies(this.params.emberVersion, '<4.2.0-beta.0', {
|
|
202
|
+
includePrerelease: true,
|
|
203
|
+
}),
|
|
204
|
+
};
|
|
205
|
+
return [require.resolve('./resolver-transform'), opts];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
humanReadableFile(file) {
|
|
209
|
+
if (!this.params.root.endsWith('/')) {
|
|
210
|
+
this.params.root += '/';
|
|
211
|
+
}
|
|
212
|
+
if (file.startsWith(this.params.root)) {
|
|
213
|
+
return file.slice(this.params.root.length);
|
|
214
|
+
}
|
|
215
|
+
return file;
|
|
216
|
+
}
|
|
217
|
+
reportError(dep, filename, source) {
|
|
218
|
+
if (!this.auditHandler && !this.params.options.allowUnsafeDynamicComponents) {
|
|
219
|
+
let e = new Error(`${dep.message}: ${dep.detail} in ${this.humanReadableFile(filename)}`);
|
|
220
|
+
e.isTemplateResolverError = true;
|
|
221
|
+
e.loc = dep.loc;
|
|
222
|
+
e.moduleName = filename;
|
|
223
|
+
throw e;
|
|
224
|
+
}
|
|
225
|
+
if (this.auditHandler) {
|
|
226
|
+
this.auditHandler({
|
|
227
|
+
message: dep.message,
|
|
228
|
+
filename,
|
|
229
|
+
detail: dep.detail,
|
|
230
|
+
loc: dep.loc,
|
|
231
|
+
source,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
resolveImport(path, from) {
|
|
236
|
+
let absPath;
|
|
237
|
+
try {
|
|
238
|
+
absPath = resolve_1.default.sync(path, {
|
|
239
|
+
basedir: (0, path_1.dirname)(from),
|
|
240
|
+
extensions: this.adjustImportsOptions.resolvableExtensions,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
if (absPath) {
|
|
247
|
+
let runtimeName = this.absPathToRuntimeName(absPath);
|
|
248
|
+
if (runtimeName) {
|
|
249
|
+
return { runtimeName, absPath };
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
get resolvableExtensionsPattern() {
|
|
254
|
+
return (0, core_1.extensionsPattern)(this.adjustImportsOptions.resolvableExtensions);
|
|
255
|
+
}
|
|
256
|
+
absPathToRuntimePath(absPath, owningPackage) {
|
|
257
|
+
let pkg = owningPackage || core_1.PackageCache.shared('embroider-stage3', this.params.root).ownerOfFile(absPath);
|
|
258
|
+
if (pkg) {
|
|
259
|
+
let packageRuntimeName = pkg.name;
|
|
260
|
+
for (let [runtimeName, realName] of Object.entries(this.adjustImportsOptions.renamePackages)) {
|
|
261
|
+
if (realName === packageRuntimeName) {
|
|
262
|
+
packageRuntimeName = runtimeName;
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return (0, path_1.join)(packageRuntimeName, (0, path_1.relative)(pkg.root, absPath)).split(path_1.sep).join('/');
|
|
267
|
+
}
|
|
268
|
+
else if (absPath.startsWith(this.params.root)) {
|
|
269
|
+
return (0, path_1.join)(this.params.modulePrefix, (0, path_1.relative)(this.params.root, absPath)).split(path_1.sep).join('/');
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
throw new Error(`bug: can't figure out the runtime name for ${absPath}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
absPathToRuntimeName(absPath, owningPackage) {
|
|
276
|
+
return this.absPathToRuntimePath(absPath, owningPackage)
|
|
277
|
+
.replace(this.resolvableExtensionsPattern, '')
|
|
278
|
+
.replace(/\/index$/, '');
|
|
279
|
+
}
|
|
280
|
+
get staticComponentsEnabled() {
|
|
281
|
+
return this.params.options.staticComponents || Boolean(this.auditHandler);
|
|
282
|
+
}
|
|
283
|
+
get staticHelpersEnabled() {
|
|
284
|
+
return this.params.options.staticHelpers || Boolean(this.auditHandler);
|
|
285
|
+
}
|
|
286
|
+
get staticModifiersEnabled() {
|
|
287
|
+
return this.params.options.staticModifiers || Boolean(this.auditHandler);
|
|
288
|
+
}
|
|
289
|
+
tryHelper(path, from) {
|
|
290
|
+
let parts = path.split('@');
|
|
291
|
+
if (parts.length > 1 && parts[0].length > 0) {
|
|
292
|
+
let cache = core_1.PackageCache.shared('embroider-stage3', this.params.root);
|
|
293
|
+
let packageName = parts[0];
|
|
294
|
+
let renamed = this.adjustImportsOptions.renamePackages[packageName];
|
|
295
|
+
if (renamed) {
|
|
296
|
+
packageName = renamed;
|
|
297
|
+
}
|
|
298
|
+
let owner = cache.ownerOfFile(from);
|
|
299
|
+
let targetPackage = owner.name === packageName ? owner : cache.resolve(packageName, owner);
|
|
300
|
+
return this._tryHelper(parts[1], from, targetPackage);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
return this._tryHelper(path, from, this.appPackage);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
_tryHelper(path, from, targetPackage) {
|
|
307
|
+
for (let extension of this.adjustImportsOptions.resolvableExtensions) {
|
|
308
|
+
let absPath = (0, path_1.join)(targetPackage.root, 'helpers', path) + extension;
|
|
309
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
310
|
+
return {
|
|
311
|
+
type: 'helper',
|
|
312
|
+
module: {
|
|
313
|
+
runtimeName: this.absPathToRuntimeName(absPath, targetPackage),
|
|
314
|
+
path: (0, core_1.explicitRelative)((0, path_1.dirname)(from), absPath),
|
|
315
|
+
absPath,
|
|
316
|
+
},
|
|
317
|
+
nameHint: path,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
tryModifier(path, from) {
|
|
324
|
+
let parts = path.split('@');
|
|
325
|
+
if (parts.length > 1 && parts[0].length > 0) {
|
|
326
|
+
let cache = core_1.PackageCache.shared('embroider-stage3', this.params.root);
|
|
327
|
+
let packageName = parts[0];
|
|
328
|
+
let renamed = this.adjustImportsOptions.renamePackages[packageName];
|
|
329
|
+
if (renamed) {
|
|
330
|
+
packageName = renamed;
|
|
331
|
+
}
|
|
332
|
+
let owner = cache.ownerOfFile(from);
|
|
333
|
+
let targetPackage = owner.name === packageName ? owner : cache.resolve(packageName, owner);
|
|
334
|
+
return this._tryModifier(parts[1], from, targetPackage);
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
return this._tryModifier(path, from, this.appPackage);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
_tryModifier(path, from, targetPackage) {
|
|
341
|
+
for (let extension of this.adjustImportsOptions.resolvableExtensions) {
|
|
342
|
+
let absPath = (0, path_1.join)(targetPackage.root, 'modifiers', path) + extension;
|
|
343
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
344
|
+
return {
|
|
345
|
+
type: 'modifier',
|
|
346
|
+
module: {
|
|
347
|
+
runtimeName: this.absPathToRuntimeName(absPath, targetPackage),
|
|
348
|
+
path: (0, core_1.explicitRelative)((0, path_1.dirname)(from), absPath),
|
|
349
|
+
absPath,
|
|
350
|
+
},
|
|
351
|
+
nameHint: path,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
get appPackage() {
|
|
358
|
+
return { root: this.params.root, name: this.params.modulePrefix };
|
|
359
|
+
}
|
|
360
|
+
tryComponent(path, from, withRuleLookup = true) {
|
|
361
|
+
let parts = path.split('@');
|
|
362
|
+
if (parts.length > 1 && parts[0].length > 0) {
|
|
363
|
+
let cache = core_1.PackageCache.shared('embroider-stage3', this.params.root);
|
|
364
|
+
let packageName = parts[0];
|
|
365
|
+
let renamed = this.adjustImportsOptions.renamePackages[packageName];
|
|
366
|
+
if (renamed) {
|
|
367
|
+
packageName = renamed;
|
|
368
|
+
}
|
|
369
|
+
let owner = cache.ownerOfFile(from);
|
|
370
|
+
let targetPackage = owner.name === packageName ? owner : cache.resolve(packageName, owner);
|
|
371
|
+
return this._tryComponent(parts[1], from, withRuleLookup, targetPackage);
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
return this._tryComponent(path, from, withRuleLookup, this.appPackage);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
_tryComponent(path, from, withRuleLookup, targetPackage) {
|
|
378
|
+
let extensions = ['.hbs', ...this.adjustImportsOptions.resolvableExtensions.filter((e) => e !== '.hbs')];
|
|
379
|
+
let hbsModule;
|
|
380
|
+
let jsModule;
|
|
381
|
+
// first, the various places our template might be
|
|
382
|
+
for (let extension of extensions) {
|
|
383
|
+
let absPath = (0, path_1.join)(targetPackage.root, 'templates', 'components', path) + extension;
|
|
384
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
385
|
+
hbsModule = absPath;
|
|
386
|
+
break;
|
|
387
|
+
}
|
|
388
|
+
absPath = (0, path_1.join)(targetPackage.root, 'components', path, 'template') + extension;
|
|
389
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
390
|
+
hbsModule = absPath;
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
if (typeof this.params.podModulePrefix !== 'undefined' &&
|
|
394
|
+
this.params.podModulePrefix !== '' &&
|
|
395
|
+
targetPackage === this.appPackage) {
|
|
396
|
+
let podPrefix = this.params.podModulePrefix.replace(this.params.modulePrefix, '');
|
|
397
|
+
absPath = (0, path_1.join)(targetPackage.root, podPrefix, 'components', path, 'template') + extension;
|
|
398
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
399
|
+
hbsModule = absPath;
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
// then the various places our javascript might be
|
|
405
|
+
for (let extension of extensions) {
|
|
406
|
+
if (extension === '.hbs') {
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
let absPath = (0, path_1.join)(targetPackage.root, 'components', path, 'index') + extension;
|
|
410
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
411
|
+
jsModule = absPath;
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
414
|
+
absPath = (0, path_1.join)(targetPackage.root, 'components', path) + extension;
|
|
415
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
416
|
+
jsModule = absPath;
|
|
417
|
+
break;
|
|
418
|
+
}
|
|
419
|
+
absPath = (0, path_1.join)(targetPackage.root, 'components', path, 'component') + extension;
|
|
420
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
421
|
+
jsModule = absPath;
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
if (typeof this.params.podModulePrefix !== 'undefined' &&
|
|
425
|
+
this.params.podModulePrefix !== '' &&
|
|
426
|
+
targetPackage === this.appPackage) {
|
|
427
|
+
let podPrefix = this.params.podModulePrefix.replace(this.params.modulePrefix, '');
|
|
428
|
+
absPath = (0, path_1.join)(targetPackage.root, podPrefix, 'components', path, 'component') + extension;
|
|
429
|
+
if ((0, fs_extra_1.pathExistsSync)(absPath)) {
|
|
430
|
+
jsModule = absPath;
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
if (jsModule == null && hbsModule == null) {
|
|
436
|
+
return null;
|
|
437
|
+
}
|
|
438
|
+
let componentRules;
|
|
439
|
+
if (withRuleLookup) {
|
|
440
|
+
// the order here is important. We follow the convention that any rules
|
|
441
|
+
// get attached to the hbsModule if it exists, and only get attached to
|
|
442
|
+
// the jsModule otherwise
|
|
443
|
+
componentRules = this.findComponentRules((hbsModule !== null && hbsModule !== void 0 ? hbsModule : jsModule));
|
|
444
|
+
}
|
|
445
|
+
return {
|
|
446
|
+
type: 'component',
|
|
447
|
+
jsModule: jsModule
|
|
448
|
+
? {
|
|
449
|
+
path: (0, core_1.explicitRelative)((0, path_1.dirname)(from), jsModule),
|
|
450
|
+
absPath: jsModule,
|
|
451
|
+
runtimeName: this.absPathToRuntimeName(jsModule, targetPackage),
|
|
452
|
+
}
|
|
453
|
+
: null,
|
|
454
|
+
hbsModule: hbsModule
|
|
455
|
+
? {
|
|
456
|
+
path: (0, core_1.explicitRelative)((0, path_1.dirname)(from), hbsModule),
|
|
457
|
+
absPath: hbsModule,
|
|
458
|
+
runtimeName: this.absPathToRuntimeName(hbsModule, targetPackage),
|
|
459
|
+
}
|
|
460
|
+
: null,
|
|
461
|
+
yieldsComponents: componentRules ? componentRules.yieldsSafeComponents : [],
|
|
462
|
+
yieldsArguments: componentRules ? componentRules.yieldsArguments : [],
|
|
463
|
+
argumentsAreComponents: componentRules ? componentRules.argumentsAreComponents : [],
|
|
464
|
+
nameHint: path,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
resolveSubExpression(path, from, loc) {
|
|
468
|
+
if (!this.staticHelpersEnabled) {
|
|
469
|
+
return null;
|
|
470
|
+
}
|
|
471
|
+
let found = this.tryHelper(path, from);
|
|
472
|
+
if (found) {
|
|
473
|
+
return found;
|
|
474
|
+
}
|
|
475
|
+
if (builtInHelpers.includes(path)) {
|
|
476
|
+
return null;
|
|
477
|
+
}
|
|
478
|
+
return {
|
|
479
|
+
type: 'error',
|
|
480
|
+
message: `Missing helper`,
|
|
481
|
+
detail: path,
|
|
482
|
+
loc,
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
resolveMustache(path, hasArgs, from, loc) {
|
|
486
|
+
if (this.staticHelpersEnabled) {
|
|
487
|
+
let found = this.tryHelper(path, from);
|
|
488
|
+
if (found) {
|
|
489
|
+
return found;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
if (this.staticComponentsEnabled) {
|
|
493
|
+
let found = this.tryComponent(path, from);
|
|
494
|
+
if (found) {
|
|
495
|
+
return found;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
if (hasArgs &&
|
|
499
|
+
this.staticComponentsEnabled &&
|
|
500
|
+
this.staticHelpersEnabled &&
|
|
501
|
+
!builtInHelpers.includes(path) &&
|
|
502
|
+
!this.isIgnoredComponent(path)) {
|
|
503
|
+
return {
|
|
504
|
+
type: 'error',
|
|
505
|
+
message: `Missing component or helper`,
|
|
506
|
+
detail: path,
|
|
507
|
+
loc,
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
return null;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
resolveElementModifierStatement(path, from, loc) {
|
|
515
|
+
if (!this.staticModifiersEnabled) {
|
|
516
|
+
return null;
|
|
517
|
+
}
|
|
518
|
+
let found = this.tryModifier(path, from);
|
|
519
|
+
if (found) {
|
|
520
|
+
return found;
|
|
521
|
+
}
|
|
522
|
+
if (builtInModifiers.includes(path)) {
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
return {
|
|
526
|
+
type: 'error',
|
|
527
|
+
message: `Missing modifier`,
|
|
528
|
+
detail: path,
|
|
529
|
+
loc,
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
resolveElement(tagName, from, loc) {
|
|
533
|
+
if (!this.staticComponentsEnabled) {
|
|
534
|
+
return null;
|
|
535
|
+
}
|
|
536
|
+
if (tagName[0] === tagName[0].toLowerCase()) {
|
|
537
|
+
// starts with lower case, so this can't be a component we need to
|
|
538
|
+
// globally resolve
|
|
539
|
+
return null;
|
|
540
|
+
}
|
|
541
|
+
let dName = (0, dasherize_component_name_1.dasherize)(tagName);
|
|
542
|
+
if (builtInComponents.includes(dName)) {
|
|
543
|
+
return null;
|
|
544
|
+
}
|
|
545
|
+
let found = this.tryComponent(dName, from);
|
|
546
|
+
if (found) {
|
|
547
|
+
found.nameHint = tagName;
|
|
548
|
+
return found;
|
|
549
|
+
}
|
|
550
|
+
if (this.isIgnoredComponent(dName)) {
|
|
551
|
+
return null;
|
|
552
|
+
}
|
|
553
|
+
return {
|
|
554
|
+
type: 'error',
|
|
555
|
+
message: `Missing component`,
|
|
556
|
+
detail: tagName,
|
|
557
|
+
loc,
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
resolveComponentHelper(component, from, loc, impliedBecause) {
|
|
561
|
+
if (!this.staticComponentsEnabled) {
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
let message;
|
|
565
|
+
if (impliedBecause) {
|
|
566
|
+
message = `argument "${impliedBecause.argumentName}" to component "${impliedBecause.componentName}" is treated as a component, but the value you're passing is dynamic`;
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
message = `Unsafe dynamic component`;
|
|
570
|
+
}
|
|
571
|
+
if (component.type === 'other') {
|
|
572
|
+
return {
|
|
573
|
+
type: 'error',
|
|
574
|
+
message,
|
|
575
|
+
detail: `cannot statically analyze this expression`,
|
|
576
|
+
loc,
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
if (component.type === 'path') {
|
|
580
|
+
let ownComponentRules = this.findComponentRules(from);
|
|
581
|
+
if (ownComponentRules && ownComponentRules.safeInteriorPaths.includes(component.path)) {
|
|
582
|
+
return null;
|
|
583
|
+
}
|
|
584
|
+
return {
|
|
585
|
+
type: 'error',
|
|
586
|
+
message,
|
|
587
|
+
detail: component.path,
|
|
588
|
+
loc,
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
if (builtInComponents.includes(component.path)) {
|
|
592
|
+
return null;
|
|
593
|
+
}
|
|
594
|
+
let found = this.tryComponent(component.path, from);
|
|
595
|
+
if (found) {
|
|
596
|
+
return found;
|
|
597
|
+
}
|
|
598
|
+
return {
|
|
599
|
+
type: 'error',
|
|
600
|
+
message: `Missing component`,
|
|
601
|
+
detail: component.path,
|
|
602
|
+
loc,
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
resolveDynamicHelper(helper, from, loc) {
|
|
606
|
+
if (!this.staticHelpersEnabled) {
|
|
607
|
+
return null;
|
|
608
|
+
}
|
|
609
|
+
if (helper.type === 'literal') {
|
|
610
|
+
let helperName = helper.path;
|
|
611
|
+
if (builtInHelpers.includes(helperName)) {
|
|
612
|
+
return null;
|
|
613
|
+
}
|
|
614
|
+
let found = this.tryHelper(helperName, from);
|
|
615
|
+
if (found) {
|
|
616
|
+
return found;
|
|
617
|
+
}
|
|
618
|
+
return {
|
|
619
|
+
type: 'error',
|
|
620
|
+
message: `Missing helper`,
|
|
621
|
+
detail: helperName,
|
|
622
|
+
loc,
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
else {
|
|
626
|
+
return {
|
|
627
|
+
type: 'error',
|
|
628
|
+
message: 'Unsafe dynamic helper',
|
|
629
|
+
detail: `cannot statically analyze this expression`,
|
|
630
|
+
loc,
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
resolveDynamicModifier(modifier, from, loc) {
|
|
635
|
+
if (!this.staticModifiersEnabled) {
|
|
636
|
+
return null;
|
|
637
|
+
}
|
|
638
|
+
if (modifier.type === 'literal') {
|
|
639
|
+
let modifierName = modifier.path;
|
|
640
|
+
if (builtInModifiers.includes(modifierName)) {
|
|
641
|
+
return null;
|
|
642
|
+
}
|
|
643
|
+
let found = this.tryModifier(modifierName, from);
|
|
644
|
+
if (found) {
|
|
645
|
+
return found;
|
|
646
|
+
}
|
|
647
|
+
return {
|
|
648
|
+
type: 'error',
|
|
649
|
+
message: `Missing modifier`,
|
|
650
|
+
detail: modifierName,
|
|
651
|
+
loc,
|
|
652
|
+
};
|
|
653
|
+
}
|
|
654
|
+
else {
|
|
655
|
+
return {
|
|
656
|
+
type: 'error',
|
|
657
|
+
message: 'Unsafe dynamic modifier',
|
|
658
|
+
detail: `cannot statically analyze this expression`,
|
|
659
|
+
loc,
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
__decorate([
|
|
665
|
+
(0, typescript_memoize_1.Memoize)()
|
|
666
|
+
], CompatResolver.prototype, "adjustImportsOptions", null);
|
|
667
|
+
__decorate([
|
|
668
|
+
(0, typescript_memoize_1.Memoize)()
|
|
669
|
+
], CompatResolver.prototype, "rules", null);
|
|
670
|
+
__decorate([
|
|
671
|
+
(0, typescript_memoize_1.Memoize)()
|
|
672
|
+
], CompatResolver.prototype, "resolvableExtensionsPattern", null);
|
|
673
|
+
__decorate([
|
|
674
|
+
(0, typescript_memoize_1.Memoize)()
|
|
675
|
+
], CompatResolver.prototype, "appPackage", null);
|
|
676
|
+
exports.default = CompatResolver;
|
|
677
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ActivePackageRules,\n ComponentRules,\n ModuleRules,\n PackageRules,\n PreprocessedComponentRule,\n preprocessComponentRule,\n} from './dependency-rules';\nimport { Package, PackageCache, explicitRelative, extensionsPattern } from '@embroider/core';\nimport { dirname, join, relative, sep } from 'path';\n\nimport { Options as AdjustImportsOptions } from '@embroider/core/src/babel-plugin-adjust-imports';\nimport { Memoize } from 'typescript-memoize';\nimport Options from './options';\nimport { dasherize, snippetToDasherizedName } from './dasherize-component-name';\nimport { pathExistsSync } from 'fs-extra';\nimport resolve from 'resolve';\nimport semver from 'semver';\nimport { Options as ResolverTransformOptions } from './resolver-transform';\n\nexport interface ResolvedDep {\n runtimeName: string;\n path: string;\n absPath: string;\n}\n\nexport interface ComponentResolution {\n type: 'component';\n jsModule: ResolvedDep | null;\n hbsModule: ResolvedDep | null;\n yieldsComponents: Required<ComponentRules>['yieldsSafeComponents'];\n yieldsArguments: Required<ComponentRules>['yieldsArguments'];\n argumentsAreComponents: string[];\n nameHint: string;\n}\n\nexport interface HelperResolution {\n type: 'helper';\n module: ResolvedDep;\n nameHint: string;\n}\n\nexport interface ModifierResolution {\n type: 'modifier';\n module: ResolvedDep;\n nameHint: string;\n}\n\nexport type ResolutionResult = ComponentResolution | HelperResolution | ModifierResolution;\n\nexport interface ResolutionFail {\n type: 'error';\n message: string;\n detail: string;\n loc: Loc;\n}\n\ninterface ResolverDependencyError extends Error {\n isTemplateResolverError?: boolean;\n loc?: Loc;\n moduleName?: string;\n}\n\nexport type Resolution = ResolutionResult | ResolutionFail;\n\nexport interface Loc {\n start: { line: number; column: number };\n end: { line: number; column: number };\n}\n\n// TODO: this depends on the ember version. And it's probably missing some\n// private-but-used values.\nconst builtInHelpers = [\n '-get-dynamic-var',\n '-in-element',\n 'in-element',\n '-with-dynamic-vars',\n 'action',\n 'array',\n 'component',\n 'concat',\n 'debugger',\n 'each',\n 'each-in',\n 'fn',\n 'get',\n 'has-block',\n 'has-block-params',\n 'hasBlock',\n 'hasBlockParams',\n 'hash',\n 'helper',\n 'if',\n 'input',\n 'let',\n 'link-to',\n 'loc',\n 'log',\n 'modifier',\n 'mount',\n 'mut',\n 'on',\n 'outlet',\n 'partial',\n 'query-params',\n 'readonly',\n 'textarea',\n 'unbound',\n 'unique-id',\n 'unless',\n 'with',\n 'yield',\n];\n\nconst builtInComponents = ['input', 'link-to', 'textarea'];\nconst builtInModifiers = ['action', 'on'];\n\n// this is a subset of the full Options. We care about serializability, and we\n// only needs parts that are easily serializable, which is why we don't keep the\n// whole thing.\ntype ResolverOptions = Pick<\n Required<Options>,\n 'staticHelpers' | 'staticModifiers' | 'staticComponents' | 'allowUnsafeDynamicComponents'\n>;\n\nfunction extractOptions(options: Required<Options> | ResolverOptions): ResolverOptions {\n return {\n staticHelpers: options.staticHelpers,\n staticModifiers: options.staticModifiers,\n staticComponents: options.staticComponents,\n allowUnsafeDynamicComponents: options.allowUnsafeDynamicComponents,\n };\n}\n\ninterface RehydrationParamsBase {\n root: string;\n modulePrefix: string;\n podModulePrefix?: string;\n options: ResolverOptions;\n emberVersion: string;\n activePackageRules: ActivePackageRules[];\n}\n\ninterface RehydrationParamsWithFile extends RehydrationParamsBase {\n adjustImportsOptionsPath: string;\n}\n\ninterface RehydrationParamsWithOptions extends RehydrationParamsBase {\n adjustImportsOptions: AdjustImportsOptions;\n}\n\ntype RehydrationParams = RehydrationParamsWithFile | RehydrationParamsWithOptions;\n\nexport function rehydrate(params: RehydrationParams) {\n return new CompatResolver(params);\n}\n\nexport interface AuditMessage {\n message: string;\n detail: string;\n loc: Loc;\n source: string;\n filename: string;\n}\n\nexport default class CompatResolver {\n private auditHandler: undefined | ((msg: AuditMessage) => void);\n\n _parallelBabel: {\n requireFile: string;\n buildUsing: string;\n params: RehydrationParams;\n };\n\n constructor(private params: RehydrationParams) {\n this.params.options = extractOptions(this.params.options);\n this._parallelBabel = {\n requireFile: __filename,\n buildUsing: 'rehydrate',\n params,\n };\n if ((globalThis as any).embroider_audit) {\n this.auditHandler = (globalThis as any).embroider_audit;\n }\n }\n\n private findComponentRules(absPath: string): PreprocessedComponentRule | undefined {\n let rules = this.rules.components.get(absPath);\n if (rules) {\n return rules;\n }\n\n // co-located templates aren't visible to the resolver, because they never\n // get resolved from a template (they are always handled directly by the\n // corresponding JS module, which the resolver *does* see). This means their\n // paths won't ever be in `this.rules.components`. But we do want them to\n // \"inherit\" the rules that are attached to their corresonding JS module.\n if (absPath.endsWith('.hbs')) {\n let stem = absPath.slice(0, -4);\n for (let ext of this.adjustImportsOptions.resolvableExtensions) {\n if (ext !== '.hbs') {\n let rules = this.rules.components.get(stem + ext);\n if (rules) {\n return rules;\n }\n }\n }\n }\n return undefined;\n }\n\n private isIgnoredComponent(dasherizedName: string) {\n return this.rules.ignoredComponents.includes(dasherizedName);\n }\n\n @Memoize()\n get adjustImportsOptions(): AdjustImportsOptions {\n const { params } = this;\n return 'adjustImportsOptionsPath' in params\n ? // eslint-disable-next-line @typescript-eslint/no-require-imports\n require(params.adjustImportsOptionsPath)\n : params.adjustImportsOptions;\n }\n\n @Memoize()\n private get rules() {\n // keyed by their first resolved dependency's runtimeName.\n let components: Map<string, PreprocessedComponentRule> = new Map();\n\n // keyed by our own dasherized interpretation of the component's name.\n let ignoredComponents: string[] = [];\n\n // we're not responsible for filtering out rules for inactive packages here,\n // that is done before getting to us. So we should assume these are all in\n // force.\n for (let rule of this.params.activePackageRules) {\n if (rule.components) {\n for (let [snippet, componentRules] of Object.entries(rule.components)) {\n if (componentRules.safeToIgnore) {\n ignoredComponents.push(this.standardDasherize(snippet, rule));\n continue;\n }\n let resolvedSnippet = this.resolveComponentSnippet(snippet, rule);\n\n // cast is OK here because a component must have one or the other\n let resolvedDep = (resolvedSnippet.hbsModule ?? resolvedSnippet.jsModule)!;\n\n let processedRules = preprocessComponentRule(componentRules);\n\n // we always register our rules on the component's own first resolved\n // module, which must be a module in the app's module namespace.\n components.set(resolvedDep.absPath, processedRules);\n\n // if there's a custom layout, we also need to register our rules on\n // those templates.\n if (componentRules.layout) {\n if (componentRules.layout.appPath) {\n components.set(join(this.params.root, componentRules.layout.appPath), processedRules);\n } else if (componentRules.layout.addonPath) {\n for (let root of rule.roots) {\n components.set(join(root, componentRules.layout.addonPath), processedRules);\n }\n } else {\n throw new Error(\n `layout property in component rule must contain either appPath or addonPath: ${JSON.stringify(\n rule,\n null,\n 2\n )}`\n );\n }\n }\n }\n }\n if (rule.appTemplates) {\n for (let [path, templateRules] of Object.entries(rule.appTemplates)) {\n let processedRules = preprocessComponentRule(templateRules);\n components.set(join(this.params.root, path), processedRules);\n }\n }\n if (rule.addonTemplates) {\n for (let [path, templateRules] of Object.entries(rule.addonTemplates)) {\n let processedRules = preprocessComponentRule(templateRules);\n for (let root of rule.roots) {\n components.set(join(root, path), processedRules);\n }\n }\n }\n }\n return { components, ignoredComponents };\n }\n\n resolveComponentSnippet(\n snippet: string,\n rule: PackageRules | ModuleRules,\n from = 'rule-snippet.hbs'\n ): ComponentResolution {\n let name = this.standardDasherize(snippet, rule);\n let found = this.tryComponent(name, from, false);\n if (found && found.type === 'component') {\n return found;\n }\n throw new Error(`unable to locate component ${snippet} referred to in rule ${JSON.stringify(rule, null, 2)}`);\n }\n\n private standardDasherize(snippet: string, rule: PackageRules | ModuleRules): string {\n let name = snippetToDasherizedName(snippet);\n if (name == null) {\n throw new Error(`unable to parse component snippet \"${snippet}\" from rule ${JSON.stringify(rule, null, 2)}`);\n }\n return name;\n }\n\n astTransformer(): undefined | string | [string, unknown] {\n if (this.staticComponentsEnabled || this.staticHelpersEnabled || this.staticModifiersEnabled) {\n let opts: ResolverTransformOptions = {\n resolver: this,\n // lexical invocation of helpers was not reliable before Ember 4.2 due to https://github.com/emberjs/ember.js/pull/19878\n patchHelpersBug: semver.satisfies(this.params.emberVersion, '<4.2.0-beta.0', {\n includePrerelease: true,\n }),\n };\n return [require.resolve('./resolver-transform'), opts];\n }\n }\n\n private humanReadableFile(file: string) {\n if (!this.params.root.endsWith('/')) {\n this.params.root += '/';\n }\n if (file.startsWith(this.params.root)) {\n return file.slice(this.params.root.length);\n }\n return file;\n }\n\n reportError(dep: ResolutionFail, filename: string, source: string) {\n if (!this.auditHandler && !this.params.options.allowUnsafeDynamicComponents) {\n let e: ResolverDependencyError = new Error(\n `${dep.message}: ${dep.detail} in ${this.humanReadableFile(filename)}`\n );\n e.isTemplateResolverError = true;\n e.loc = dep.loc;\n e.moduleName = filename;\n throw e;\n }\n if (this.auditHandler) {\n this.auditHandler({\n message: dep.message,\n filename,\n detail: dep.detail,\n loc: dep.loc,\n source,\n });\n }\n }\n\n resolveImport(path: string, from: string): { runtimeName: string; absPath: string } | undefined {\n let absPath;\n try {\n absPath = resolve.sync(path, {\n basedir: dirname(from),\n extensions: this.adjustImportsOptions.resolvableExtensions,\n });\n } catch (err) {\n return;\n }\n if (absPath) {\n let runtimeName = this.absPathToRuntimeName(absPath);\n if (runtimeName) {\n return { runtimeName, absPath };\n }\n }\n }\n\n @Memoize()\n private get resolvableExtensionsPattern() {\n return extensionsPattern(this.adjustImportsOptions.resolvableExtensions);\n }\n\n private absPathToRuntimePath(absPath: string, owningPackage?: { root: string; name: string }) {\n let pkg = owningPackage || PackageCache.shared('embroider-stage3', this.params.root).ownerOfFile(absPath);\n if (pkg) {\n let packageRuntimeName = pkg.name;\n for (let [runtimeName, realName] of Object.entries(this.adjustImportsOptions.renamePackages)) {\n if (realName === packageRuntimeName) {\n packageRuntimeName = runtimeName;\n break;\n }\n }\n return join(packageRuntimeName, relative(pkg.root, absPath)).split(sep).join('/');\n } else if (absPath.startsWith(this.params.root)) {\n return join(this.params.modulePrefix, relative(this.params.root, absPath)).split(sep).join('/');\n } else {\n throw new Error(`bug: can't figure out the runtime name for ${absPath}`);\n }\n }\n\n absPathToRuntimeName(absPath: string, owningPackage?: { root: string; name: string }) {\n return this.absPathToRuntimePath(absPath, owningPackage)\n .replace(this.resolvableExtensionsPattern, '')\n .replace(/\\/index$/, '');\n }\n\n private get staticComponentsEnabled(): boolean {\n return this.params.options.staticComponents || Boolean(this.auditHandler);\n }\n\n private get staticHelpersEnabled(): boolean {\n return this.params.options.staticHelpers || Boolean(this.auditHandler);\n }\n\n private get staticModifiersEnabled(): boolean {\n return this.params.options.staticModifiers || Boolean(this.auditHandler);\n }\n\n private tryHelper(path: string, from: string): HelperResolution | null {\n let parts = path.split('@');\n if (parts.length > 1 && parts[0].length > 0) {\n let cache = PackageCache.shared('embroider-stage3', this.params.root);\n let packageName = parts[0];\n let renamed = this.adjustImportsOptions.renamePackages[packageName];\n if (renamed) {\n packageName = renamed;\n }\n let owner = cache.ownerOfFile(from)!;\n let targetPackage = owner.name === packageName ? owner : cache.resolve(packageName, owner);\n return this._tryHelper(parts[1], from, targetPackage);\n } else {\n return this._tryHelper(path, from, this.appPackage);\n }\n }\n\n private _tryHelper(\n path: string,\n from: string,\n targetPackage: Package | AppPackagePlaceholder\n ): HelperResolution | null {\n for (let extension of this.adjustImportsOptions.resolvableExtensions) {\n let absPath = join(targetPackage.root, 'helpers', path) + extension;\n if (pathExistsSync(absPath)) {\n return {\n type: 'helper',\n module: {\n runtimeName: this.absPathToRuntimeName(absPath, targetPackage),\n path: explicitRelative(dirname(from), absPath),\n absPath,\n },\n nameHint: path,\n };\n }\n }\n return null;\n }\n\n private tryModifier(path: string, from: string): ModifierResolution | null {\n let parts = path.split('@');\n if (parts.length > 1 && parts[0].length > 0) {\n let cache = PackageCache.shared('embroider-stage3', this.params.root);\n let packageName = parts[0];\n let renamed = this.adjustImportsOptions.renamePackages[packageName];\n if (renamed) {\n packageName = renamed;\n }\n let owner = cache.ownerOfFile(from)!;\n let targetPackage = owner.name === packageName ? owner : cache.resolve(packageName, owner);\n return this._tryModifier(parts[1], from, targetPackage);\n } else {\n return this._tryModifier(path, from, this.appPackage);\n }\n }\n\n private _tryModifier(\n path: string,\n from: string,\n targetPackage: Package | AppPackagePlaceholder\n ): ModifierResolution | null {\n for (let extension of this.adjustImportsOptions.resolvableExtensions) {\n let absPath = join(targetPackage.root, 'modifiers', path) + extension;\n if (pathExistsSync(absPath)) {\n return {\n type: 'modifier',\n module: {\n runtimeName: this.absPathToRuntimeName(absPath, targetPackage),\n path: explicitRelative(dirname(from), absPath),\n absPath,\n },\n nameHint: path,\n };\n }\n }\n return null;\n }\n\n @Memoize()\n private get appPackage(): AppPackagePlaceholder {\n return { root: this.params.root, name: this.params.modulePrefix };\n }\n\n private tryComponent(path: string, from: string, withRuleLookup = true): ComponentResolution | null {\n let parts = path.split('@');\n if (parts.length > 1 && parts[0].length > 0) {\n let cache = PackageCache.shared('embroider-stage3', this.params.root);\n let packageName = parts[0];\n let renamed = this.adjustImportsOptions.renamePackages[packageName];\n if (renamed) {\n packageName = renamed;\n }\n let owner = cache.ownerOfFile(from)!;\n let targetPackage = owner.name === packageName ? owner : cache.resolve(packageName, owner);\n\n return this._tryComponent(parts[1], from, withRuleLookup, targetPackage);\n } else {\n return this._tryComponent(path, from, withRuleLookup, this.appPackage);\n }\n }\n\n private _tryComponent(\n path: string,\n from: string,\n withRuleLookup: boolean,\n targetPackage: Package | AppPackagePlaceholder\n ): ComponentResolution | null {\n let extensions = ['.hbs', ...this.adjustImportsOptions.resolvableExtensions.filter((e: string) => e !== '.hbs')];\n\n let hbsModule: string | undefined;\n let jsModule: string | undefined;\n\n // first, the various places our template might be\n for (let extension of extensions) {\n let absPath = join(targetPackage.root, 'templates', 'components', path) + extension;\n if (pathExistsSync(absPath)) {\n hbsModule = absPath;\n break;\n }\n\n absPath = join(targetPackage.root, 'components', path, 'template') + extension;\n if (pathExistsSync(absPath)) {\n hbsModule = absPath;\n break;\n }\n\n if (\n typeof this.params.podModulePrefix !== 'undefined' &&\n this.params.podModulePrefix !== '' &&\n targetPackage === this.appPackage\n ) {\n let podPrefix = this.params.podModulePrefix.replace(this.params.modulePrefix, '');\n\n absPath = join(targetPackage.root, podPrefix, 'components', path, 'template') + extension;\n if (pathExistsSync(absPath)) {\n hbsModule = absPath;\n break;\n }\n }\n }\n\n // then the various places our javascript might be\n for (let extension of extensions) {\n if (extension === '.hbs') {\n continue;\n }\n\n let absPath = join(targetPackage.root, 'components', path, 'index') + extension;\n if (pathExistsSync(absPath)) {\n jsModule = absPath;\n break;\n }\n\n absPath = join(targetPackage.root, 'components', path) + extension;\n if (pathExistsSync(absPath)) {\n jsModule = absPath;\n break;\n }\n\n absPath = join(targetPackage.root, 'components', path, 'component') + extension;\n if (pathExistsSync(absPath)) {\n jsModule = absPath;\n break;\n }\n\n if (\n typeof this.params.podModulePrefix !== 'undefined' &&\n this.params.podModulePrefix !== '' &&\n targetPackage === this.appPackage\n ) {\n let podPrefix = this.params.podModulePrefix.replace(this.params.modulePrefix, '');\n\n absPath = join(targetPackage.root, podPrefix, 'components', path, 'component') + extension;\n if (pathExistsSync(absPath)) {\n jsModule = absPath;\n break;\n }\n }\n }\n\n if (jsModule == null && hbsModule == null) {\n return null;\n }\n\n let componentRules;\n if (withRuleLookup) {\n // the order here is important. We follow the convention that any rules\n // get attached to the hbsModule if it exists, and only get attached to\n // the jsModule otherwise\n componentRules = this.findComponentRules((hbsModule ?? jsModule)!);\n }\n return {\n type: 'component',\n jsModule: jsModule\n ? {\n path: explicitRelative(dirname(from), jsModule),\n absPath: jsModule,\n runtimeName: this.absPathToRuntimeName(jsModule, targetPackage),\n }\n : null,\n hbsModule: hbsModule\n ? {\n path: explicitRelative(dirname(from), hbsModule),\n absPath: hbsModule,\n runtimeName: this.absPathToRuntimeName(hbsModule, targetPackage),\n }\n : null,\n yieldsComponents: componentRules ? componentRules.yieldsSafeComponents : [],\n yieldsArguments: componentRules ? componentRules.yieldsArguments : [],\n argumentsAreComponents: componentRules ? componentRules.argumentsAreComponents : [],\n nameHint: path,\n };\n }\n\n resolveSubExpression(path: string, from: string, loc: Loc): HelperResolution | ResolutionFail | null {\n if (!this.staticHelpersEnabled) {\n return null;\n }\n let found = this.tryHelper(path, from);\n if (found) {\n return found;\n }\n if (builtInHelpers.includes(path)) {\n return null;\n }\n return {\n type: 'error',\n message: `Missing helper`,\n detail: path,\n loc,\n };\n }\n\n resolveMustache(\n path: string,\n hasArgs: boolean,\n from: string,\n loc: Loc\n ): HelperResolution | ComponentResolution | ResolutionFail | null {\n if (this.staticHelpersEnabled) {\n let found = this.tryHelper(path, from);\n if (found) {\n return found;\n }\n }\n if (this.staticComponentsEnabled) {\n let found = this.tryComponent(path, from);\n if (found) {\n return found;\n }\n }\n if (\n hasArgs &&\n this.staticComponentsEnabled &&\n this.staticHelpersEnabled &&\n !builtInHelpers.includes(path) &&\n !this.isIgnoredComponent(path)\n ) {\n return {\n type: 'error',\n message: `Missing component or helper`,\n detail: path,\n loc,\n };\n } else {\n return null;\n }\n }\n\n resolveElementModifierStatement(path: string, from: string, loc: Loc): ModifierResolution | ResolutionFail | null {\n if (!this.staticModifiersEnabled) {\n return null;\n }\n let found = this.tryModifier(path, from);\n if (found) {\n return found;\n }\n if (builtInModifiers.includes(path)) {\n return null;\n }\n return {\n type: 'error',\n message: `Missing modifier`,\n detail: path,\n loc,\n };\n }\n\n resolveElement(tagName: string, from: string, loc: Loc): ComponentResolution | ResolutionFail | null {\n if (!this.staticComponentsEnabled) {\n return null;\n }\n\n if (tagName[0] === tagName[0].toLowerCase()) {\n // starts with lower case, so this can't be a component we need to\n // globally resolve\n return null;\n }\n\n let dName = dasherize(tagName);\n\n if (builtInComponents.includes(dName)) {\n return null;\n }\n\n let found = this.tryComponent(dName, from);\n if (found) {\n found.nameHint = tagName;\n return found;\n }\n\n if (this.isIgnoredComponent(dName)) {\n return null;\n }\n\n return {\n type: 'error',\n message: `Missing component`,\n detail: tagName,\n loc,\n };\n }\n\n resolveComponentHelper(\n component: ComponentLocator,\n from: string,\n loc: Loc,\n impliedBecause?: { componentName: string; argumentName: string }\n ): ComponentResolution | ResolutionFail | null {\n if (!this.staticComponentsEnabled) {\n return null;\n }\n\n let message;\n if (impliedBecause) {\n message = `argument \"${impliedBecause.argumentName}\" to component \"${impliedBecause.componentName}\" is treated as a component, but the value you're passing is dynamic`;\n } else {\n message = `Unsafe dynamic component`;\n }\n\n if (component.type === 'other') {\n return {\n type: 'error',\n message,\n detail: `cannot statically analyze this expression`,\n loc,\n };\n }\n if (component.type === 'path') {\n let ownComponentRules = this.findComponentRules(from);\n if (ownComponentRules && ownComponentRules.safeInteriorPaths.includes(component.path)) {\n return null;\n }\n return {\n type: 'error',\n message,\n detail: component.path,\n loc,\n };\n }\n\n if (builtInComponents.includes(component.path)) {\n return null;\n }\n\n let found = this.tryComponent(component.path, from);\n if (found) {\n return found;\n }\n return {\n type: 'error',\n message: `Missing component`,\n detail: component.path,\n loc,\n };\n }\n\n resolveDynamicHelper(helper: ComponentLocator, from: string, loc: Loc): HelperResolution | ResolutionFail | null {\n if (!this.staticHelpersEnabled) {\n return null;\n }\n\n if (helper.type === 'literal') {\n let helperName = helper.path;\n if (builtInHelpers.includes(helperName)) {\n return null;\n }\n\n let found = this.tryHelper(helperName, from);\n if (found) {\n return found;\n }\n return {\n type: 'error',\n message: `Missing helper`,\n detail: helperName,\n loc,\n };\n } else {\n return {\n type: 'error',\n message: 'Unsafe dynamic helper',\n detail: `cannot statically analyze this expression`,\n loc,\n };\n }\n }\n\n resolveDynamicModifier(\n modifier: ComponentLocator,\n from: string,\n loc: Loc\n ): ModifierResolution | ResolutionFail | null {\n if (!this.staticModifiersEnabled) {\n return null;\n }\n\n if (modifier.type === 'literal') {\n let modifierName = modifier.path;\n if (builtInModifiers.includes(modifierName)) {\n return null;\n }\n\n let found = this.tryModifier(modifierName, from);\n if (found) {\n return found;\n }\n return {\n type: 'error',\n message: `Missing modifier`,\n detail: modifierName,\n loc,\n };\n } else {\n return {\n type: 'error',\n message: 'Unsafe dynamic modifier',\n detail: `cannot statically analyze this expression`,\n loc,\n };\n }\n }\n}\n\n// we don't have a real Package for the app itself because the resolver has work\n// to do before we have even written out the app's own package.json and\n// therefore made it into a fully functional Package.\ninterface AppPackagePlaceholder {\n root: string;\n name: string;\n}\n\nexport type ComponentLocator =\n | {\n type: 'literal';\n path: string;\n }\n | {\n type: 'path';\n path: string;\n }\n | {\n type: 'other';\n };\n"]}
|