Skip to content

Commit 293c6a0

Browse files
committed
fix: allow developers to indicate the class name for minification
1 parent 86bad00 commit 293c6a0

File tree

10 files changed

+1358
-3
lines changed

10 files changed

+1358
-3
lines changed

ava.config.js

+6
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,10 @@ export default {
55
'exports/**/*.test.js',
66
'test/acceptance/**/*.test.js',
77
],
8+
watchMode: {
9+
ignoreChanges: [
10+
'coverage',
11+
'test/fixtures/minified/*',
12+
],
13+
},
814
};

eslint.config.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@ import globals from 'globals';
22
import pluginJs from '@eslint/js';
33

44
export default [
5-
{ignores: ['coverage/', 'node_modules/']},
5+
{
6+
ignores: [
7+
'coverage/',
8+
'node_modules/',
9+
'test/fixtures/minified/main.bundle.*',
10+
],
11+
},
612
{languageOptions: {globals: globals.node}},
713
pluginJs.configs.recommended,
814
{

src/engine/S3Engine.test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,7 @@ test('S3Engine.find(MainModel, {string: "test"}) when a matching model does not
736736
bucket: 'test-bucket',
737737
prefix: 'test',
738738
client,
739-
}).find(MainModel, {string: 'String'});
739+
}).find(MainModel, {string: 'test'});
740740

741741
assertions.calledWith(t, client.send, new GetObjectCommand({
742742
Key: 'test/MainModel/_index.json',
@@ -753,7 +753,7 @@ test('S3Engine.find(MainModel, {string: "test"}) when no index exists', async t
753753
bucket: 'test-bucket',
754754
prefix: 'test',
755755
client,
756-
}).find(MainModel, {string: 'String'});
756+
}).find(MainModel, {string: 'test'});
757757

758758
t.deepEqual(models, []);
759759
});

src/type/resolved/SlugType.js

+2
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ class SlugType extends ResolvedType {
5757
}
5858
}
5959

60+
Object.defineProperty(SlugOf, 'name', {value: `SlugOf(${property})`});
61+
6062
return SlugOf;
6163
}
6264

test/acceptance/minified.test.js

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import {dirname, resolve} from 'node:path';
2+
import {fileURLToPath} from 'node:url';
3+
import {spawn} from 'node:child_process';
4+
import test from 'ava';
5+
6+
const run = (command, ...args) =>
7+
new Promise((done, failed) => {
8+
const execution = spawn(command, args, {
9+
cwd: resolve(dirname(fileURLToPath(import.meta.url)), '../fixtures/minified'),
10+
env: process.env,
11+
shell: true,
12+
});
13+
14+
const output = [];
15+
16+
execution.stdout.on('data', (data) => {
17+
output.push(`stdout: ${data}`);
18+
});
19+
20+
execution.stderr.on('data', (data) => {
21+
output.push(`stderr: ${data}`);
22+
});
23+
24+
execution.on('close', (_) => {
25+
done();
26+
});
27+
28+
execution.on('error', (error) => {
29+
console.error(output.join('\n'));
30+
failed(error);
31+
});
32+
});
33+
34+
test('model and type names are not mangled when minified', async t => {
35+
t.timeout(30 * 1000);
36+
37+
await run('npm', 'i');
38+
await run('npm', 'run', 'webpack');
39+
40+
const {getModel} = await import('../fixtures/minified/main.bundle.js');
41+
const model = getModel();
42+
43+
t.is(model.name, 'MainModel');
44+
45+
t.is(model.custom.name, 'Custom');
46+
47+
t.is(model.string.name, 'String');
48+
t.is(model.stringSlug.name, 'SlugOf(string)');
49+
t.is(model.requiredString.name, 'RequiredString');
50+
t.is(model.arrayOfString.name, 'ArrayOf(String)');
51+
t.is(model.requiredArrayOfString.name, 'RequiredArrayOf(String)');
52+
53+
t.is(model.boolean.name, 'Boolean');
54+
t.is(model.requiredBoolean.name, 'RequiredBoolean');
55+
t.is(model.arrayOfBoolean.name, 'ArrayOf(Boolean)');
56+
t.is(model.requiredArrayOfBoolean.name, 'RequiredArrayOf(Boolean)');
57+
58+
t.is(model.number.name, 'Number');
59+
t.is(model.requiredNumber.name, 'RequiredNumber');
60+
t.is(model.arrayOfNumber.name, 'ArrayOf(Number)');
61+
t.is(model.requiredArrayOfNumber.name, 'RequiredArrayOf(Number)');
62+
63+
t.is(model.date.name, 'Date');
64+
t.is(model.requiredDate.name, 'RequiredDate');
65+
t.is(model.arrayOfDate.name, 'ArrayOf(Date)');
66+
t.is(model.requiredArrayOfDate.name, 'RequiredArrayOf(Date)');
67+
68+
t.is(model.linked.name, 'LinkedModel');
69+
t.is(model.linkedMany.name, 'ArrayOf(LinkedManyModel)');
70+
71+
t.is(model.circular.name, 'CircularModel');
72+
t.is(model.circularMany.name, 'ArrayOf(CircularManyModel)');
73+
});

test/fixtures/minified/.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
node_modules/
2+
main.bundle.*

test/fixtures/minified/main.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import {MainModel} from '../Models.js';
2+
3+
export const getModel = () => MainModel;

0 commit comments

Comments
 (0)