Skip to content

Commit dd3e0bc

Browse files
authored
Accounted for public assets (#23)
* feature: Updated analyzeAddon to find public assets * chore: Updated tests * refactor: Separated tests into multiple files * feature: Updated moveAddonFiles to move public assets * feature: Updated updateAddonPackageJson to list public assets * chore: Updated tests --------- Co-authored-by: ijlee2 <[email protected]>
1 parent 70144d9 commit dd3e0bc

File tree

28 files changed

+534
-42
lines changed

28 files changed

+534
-42
lines changed

src/migration/ember-addon/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export function migrateEmberAddon(codemodOptions) {
3434
createFilesFromBlueprint(context, options);
3535

3636
// Fine-tune individual files
37-
updateAddonPackageJson(options);
37+
updateAddonPackageJson(context, options);
3838
updateAddonTsconfigJson(options);
3939
updateTestAppPackageJson(options);
4040
updateTestAppTsconfigJson(options);

src/migration/ember-addon/steps/analyze-addon.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,25 @@ function getProjectRootDevDependencies(options) {
2727
};
2828
}
2929

30+
function getPublicAssets(options) {
31+
const { projectRoot } = options;
32+
33+
const filePaths = globSync('public/**/*', {
34+
cwd: projectRoot,
35+
dot: true,
36+
nodir: true,
37+
});
38+
39+
return filePaths
40+
.map((filePath) => {
41+
return renameDirectory(filePath, {
42+
from: 'public',
43+
to: '',
44+
});
45+
})
46+
.sort();
47+
}
48+
3049
function getPublicEntrypoints(options) {
3150
const { projectRoot } = options;
3251

@@ -57,6 +76,7 @@ export function analyzeAddon(options) {
5776
return {
5877
addon: {
5978
appReexports: getAppReexports(options),
79+
publicAssets: getPublicAssets(options),
6080
publicEntrypoints: getPublicEntrypoints(options),
6181
},
6282
projectRoot: {

src/migration/ember-addon/steps/move-addon-files.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,23 @@ function moveBlueprintsFolder(options) {
5353
moveFiles(pathMapping, options);
5454
}
5555

56+
function movePublicFolder(options) {
57+
const { locations, projectRoot } = options;
58+
59+
const filePaths = globSync('public/**/*', {
60+
cwd: projectRoot,
61+
dot: true,
62+
nodir: true,
63+
});
64+
65+
const pathMapping = mapFilePaths(filePaths, {
66+
from: 'public',
67+
to: `${locations.addon}/public`,
68+
});
69+
70+
moveFiles(pathMapping, options);
71+
}
72+
5673
function removeAppFolder(options) {
5774
const { projectRoot } = options;
5875

@@ -69,5 +86,6 @@ export function moveAddonFiles(options) {
6986
moveAddonFolder(options);
7087
moveAddonTestSupportFolder(options);
7188
moveBlueprintsFolder(options);
89+
movePublicFolder(options);
7290
removeAppFolder(options);
7391
}

src/migration/ember-addon/steps/update-addon-package-json.js

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,38 @@ function updateDevDependencies(packageJson, options) {
7171
packageJson['devDependencies'] = convertToObject(devDependencies);
7272
}
7373

74-
function updateOtherFields(packageJson, options) {
74+
function updateOtherFields(packageJson, context, options) {
7575
const { packages } = options;
76+
const hasPublicAssets = context.addon.publicAssets.length > 0;
7677

77-
packageJson['ember-addon'] = {
78-
'app-js': {},
79-
main: 'addon-main.cjs',
80-
type: 'addon',
81-
version: 2,
82-
};
78+
if (hasPublicAssets) {
79+
const publicAssetMapping = context.addon.publicAssets.reduce(
80+
(accumulator, filePath) => {
81+
const from = `./public/${filePath}`;
82+
const to = `/${packages.addon.name}/${filePath}`;
83+
84+
accumulator[from] = to;
85+
86+
return accumulator;
87+
},
88+
{}
89+
);
90+
91+
packageJson['ember-addon'] = {
92+
'app-js': {},
93+
main: 'addon-main.cjs',
94+
'public-assets': publicAssetMapping,
95+
type: 'addon',
96+
version: 2,
97+
};
98+
} else {
99+
packageJson['ember-addon'] = {
100+
'app-js': {},
101+
main: 'addon-main.cjs',
102+
type: 'addon',
103+
version: 2,
104+
};
105+
}
83106

84107
if (packages.addon.hasTypeScript) {
85108
packageJson['exports'] = {
@@ -98,7 +121,11 @@ function updateOtherFields(packageJson, options) {
98121
};
99122
}
100123

101-
packageJson['files'] = ['addon-main.cjs', 'dist'];
124+
if (hasPublicAssets) {
125+
packageJson['files'] = ['addon-main.cjs', 'dist', 'public'];
126+
} else {
127+
packageJson['files'] = ['addon-main.cjs', 'dist'];
128+
}
102129

103130
if (packages.addon.hasTypeScript) {
104131
packageJson['typesVersions'] = {
@@ -123,7 +150,7 @@ function updateScripts(packageJson) {
123150
packageJson['scripts'] = convertToObject(scripts);
124151
}
125152

126-
export function updateAddonPackageJson(options) {
153+
export function updateAddonPackageJson(context, options) {
127154
const { locations, projectRoot } = options;
128155

129156
const oldPath = join(projectRoot, locations.addon, 'package.json');
@@ -133,7 +160,7 @@ export function updateAddonPackageJson(options) {
133160
updateDependencies(packageJson, options);
134161
updateDevDependencies(packageJson, options);
135162
updateScripts(packageJson);
136-
updateOtherFields(packageJson, options);
163+
updateOtherFields(packageJson, context, options);
137164

138165
const newFile = JSON.stringify(packageJson, null, 2) + '\n';
139166

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
{
2+
"name": "ember-container-query",
3+
"version": "3.2.0",
4+
"description": "Container queries using Ember modifiers",
5+
"keywords": [
6+
"container-queries",
7+
"container-query",
8+
"element-queries",
9+
"element-query",
10+
"ember-addon",
11+
"ember-octane",
12+
"emberjs",
13+
"glint",
14+
"responsive-design"
15+
],
16+
"repository": {
17+
"type": "git",
18+
"url": "https://github.com/ijlee2/ember-container-query.git"
19+
},
20+
"license": "MIT",
21+
"author": "Isaac J. Lee",
22+
"directories": {
23+
"doc": "doc",
24+
"test": "tests"
25+
},
26+
"scripts": {
27+
"build": "ember build --environment=production",
28+
"build:test": "ember build --environment=test",
29+
"changelog": "lerna-changelog",
30+
"lint": "concurrently \"npm:lint:*(!fix)\" --names \"lint:\"",
31+
"lint:css": "stylelint \"tests/dummy/app/**/*.css\" --cache",
32+
"lint:css:fix": "stylelint \"tests/dummy/app/**/*.css\" --fix",
33+
"lint:dependency": "ember dependency-lint",
34+
"lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\"",
35+
"lint:hbs": "ember-template-lint .",
36+
"lint:hbs:fix": "ember-template-lint . --fix",
37+
"lint:js": "eslint . --cache",
38+
"lint:js:fix": "eslint . --fix",
39+
"start": "ember serve",
40+
"test": "DEVICE='w3-h3' ember test",
41+
"test:ember": "ember test",
42+
"test:ember-compatibility": "./node_modules/.bin/ember try:one"
43+
},
44+
"changelog": {
45+
"labels": {
46+
"breaking": "Breaking Change",
47+
"bug": "Bug Fix",
48+
"enhance: code": "Enhancement",
49+
"enhance: dependency": "Internal",
50+
"enhance: documentation": "Documentation",
51+
"user feedback": "User Feedback"
52+
}
53+
},
54+
"dependencies": {
55+
"ember-cli-babel": "^7.26.11",
56+
"ember-cli-htmlbars": "^6.1.1",
57+
"ember-element-helper": "^0.6.1",
58+
"ember-modifier": "^3.2.7",
59+
"ember-resize-observer-service": "^1.1.0",
60+
"ember-test-selectors": "^6.0.0"
61+
},
62+
"devDependencies": {
63+
"@babel/eslint-parser": "^7.19.1",
64+
"@babel/plugin-proposal-decorators": "^7.20.7",
65+
"@ember/optional-features": "^2.0.0",
66+
"@ember/test-helpers": "^2.9.3",
67+
"@embroider/test-setup": "^2.0.2",
68+
"@glimmer/component": "^1.1.2",
69+
"@glimmer/tracking": "^1.1.2",
70+
"@percy/cli": "^1.16.0",
71+
"@percy/ember": "^4.0.0",
72+
"broccoli-asset-rev": "^3.0.0",
73+
"concurrently": "^7.6.0",
74+
"d3-array": "^3.2.1",
75+
"d3-axis": "^3.0.0",
76+
"d3-scale": "^4.0.2",
77+
"d3-selection": "^3.0.0",
78+
"d3-shape": "^3.2.0",
79+
"ember-a11y-refocus": "^3.0.2",
80+
"ember-a11y-testing": "^5.1.0",
81+
"ember-auto-import": "^2.5.0",
82+
"ember-cli": "~4.9.2",
83+
"ember-cli-dependency-checker": "^3.3.1",
84+
"ember-cli-dependency-lint": "^2.0.1",
85+
"ember-cli-inject-live-reload": "^2.1.0",
86+
"ember-cli-netlify": "^0.4.1",
87+
"ember-cli-sri": "^2.1.1",
88+
"ember-cli-terser": "^4.0.2",
89+
"ember-css-modules": "^2.0.1",
90+
"ember-load-initializers": "^2.1.2",
91+
"ember-page-title": "^7.0.0",
92+
"ember-qunit": "^6.1.1",
93+
"ember-resolver": "^9.0.1",
94+
"ember-source": "~4.9.3",
95+
"ember-source-channel-url": "^3.0.0",
96+
"ember-svg-jar": "^2.4.2",
97+
"ember-template-lint": "^5.3.0",
98+
"ember-template-lint-plugin-prettier": "^4.1.0",
99+
"ember-truth-helpers": "^3.1.1",
100+
"ember-try": "^2.0.0",
101+
"eslint": "^8.31.0",
102+
"eslint-config-prettier": "^8.6.0",
103+
"eslint-plugin-ember": "^11.4.2",
104+
"eslint-plugin-n": "^15.6.0",
105+
"eslint-plugin-prettier": "^4.2.1",
106+
"eslint-plugin-qunit": "^7.3.4",
107+
"eslint-plugin-simple-import-sort": "^8.0.0",
108+
"lerna-changelog": "^2.2.0",
109+
"loader.js": "^4.7.0",
110+
"prettier": "^2.8.1",
111+
"qunit": "^2.19.3",
112+
"qunit-dom": "^2.0.0",
113+
"stylelint": "^14.16.1",
114+
"stylelint-config-standard": "^29.0.0",
115+
"stylelint-no-unsupported-browser-features": "^6.0.1",
116+
"stylelint-order": "^6.0.0",
117+
"webpack": "^5.75.0"
118+
},
119+
"engines": {
120+
"node": "14.* || 16.* || >= 18"
121+
},
122+
"ember": {
123+
"edition": "octane"
124+
},
125+
"ember-addon": {
126+
"configPath": "tests/dummy/config",
127+
"demoURL": "https://ember-container-query.netlify.app"
128+
}
129+
}

tests/fixtures/steps/update-addon-package-json/public-assets/input/ember-container-query/public/assets/documents/some-file.pdf

Whitespace-only changes.

tests/fixtures/steps/update-addon-package-json/public-assets/input/ember-container-query/public/assets/images/v1/some-file.svg

Loading
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
{
2+
"name": "ember-container-query",
3+
"version": "3.2.0",
4+
"description": "Container queries using Ember modifiers",
5+
"keywords": [
6+
"container-queries",
7+
"container-query",
8+
"element-queries",
9+
"element-query",
10+
"ember-addon",
11+
"ember-octane",
12+
"emberjs",
13+
"glint",
14+
"responsive-design"
15+
],
16+
"repository": {
17+
"type": "git",
18+
"url": "https://github.com/ijlee2/ember-container-query.git"
19+
},
20+
"license": "MIT",
21+
"author": "Isaac J. Lee",
22+
"directories": {
23+
"doc": "doc",
24+
"test": "tests"
25+
},
26+
"scripts": {
27+
"build": "rollup --config",
28+
"build:test": "ember build --environment=test",
29+
"changelog": "lerna-changelog",
30+
"lint": "concurrently \"npm:lint:*(!fix)\" --names \"lint:\"",
31+
"lint:css": "stylelint \"tests/dummy/app/**/*.css\" --cache",
32+
"lint:css:fix": "stylelint \"tests/dummy/app/**/*.css\" --fix",
33+
"lint:dependency": "ember dependency-lint",
34+
"lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\"",
35+
"lint:hbs": "ember-template-lint .",
36+
"lint:hbs:fix": "ember-template-lint . --fix",
37+
"lint:js": "eslint . --cache",
38+
"lint:js:fix": "eslint . --fix",
39+
"prepack": "rollup --config",
40+
"start": "rollup --config --watch",
41+
"test": "echo 'A v2 addon does not have tests, run tests in test-app'",
42+
"test:ember": "ember test",
43+
"test:ember-compatibility": "./node_modules/.bin/ember try:one"
44+
},
45+
"changelog": {
46+
"labels": {
47+
"breaking": "Breaking Change",
48+
"bug": "Bug Fix",
49+
"enhance: code": "Enhancement",
50+
"enhance: dependency": "Internal",
51+
"enhance: documentation": "Documentation",
52+
"user feedback": "User Feedback"
53+
}
54+
},
55+
"dependencies": {
56+
"@embroider/addon-shim": "^1.8.4",
57+
"ember-element-helper": "^0.6.1",
58+
"ember-modifier": "^3.2.7",
59+
"ember-resize-observer-service": "^1.1.0",
60+
"ember-test-selectors": "^6.0.0"
61+
},
62+
"devDependencies": {
63+
"@babel/core": "^7.21.0",
64+
"@babel/plugin-proposal-class-properties": "^7.18.6",
65+
"@babel/plugin-proposal-decorators": "^7.20.7",
66+
"@embroider/addon-dev": "^3.0.0",
67+
"@rollup/plugin-babel": "^6.0.3",
68+
"rollup": "^3.18.0",
69+
"rollup-plugin-copy": "^3.4.0"
70+
},
71+
"engines": {
72+
"node": "14.* || 16.* || >= 18"
73+
},
74+
"ember": {
75+
"edition": "octane"
76+
},
77+
"ember-addon": {
78+
"app-js": {},
79+
"main": "addon-main.cjs",
80+
"public-assets": {
81+
"./public/assets/documents/some-file.pdf": "/ember-container-query/assets/documents/some-file.pdf",
82+
"./public/assets/images/v1/some-file.svg": "/ember-container-query/assets/images/v1/some-file.svg"
83+
},
84+
"type": "addon",
85+
"version": 2
86+
},
87+
"exports": {
88+
".": "./dist/index.js",
89+
"./*": "./dist/*.js",
90+
"./addon-main.js": "./addon-main.cjs"
91+
},
92+
"files": [
93+
"addon-main.cjs",
94+
"dist",
95+
"public"
96+
]
97+
}

tests/fixtures/steps/update-addon-package-json/public-assets/output/ember-container-query/public/assets/documents/some-file.pdf

Whitespace-only changes.

tests/fixtures/steps/update-addon-package-json/public-assets/output/ember-container-query/public/assets/images/v1/some-file.svg

Loading

0 commit comments

Comments
 (0)