Skip to content

Commit 90f87f2

Browse files
committed
fix: generate properties at runtime
1 parent f46fa36 commit 90f87f2

9 files changed

+8611
-4085
lines changed

.eslintignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
11
node_modules
2-
lib/implementedProperties.js
3-
lib/properties.js
42
jest.config.js

.eslintrc.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@ module.exports = {
3333
strict: ['warn', 'global'],
3434
},
3535
overrides: [
36-
{
37-
files: ['lib/implementedProperties.js', 'lib/properties.js'],
38-
rules: {
39-
'prettier/prettier': 'off',
40-
},
41-
},
4236
{
4337
files: 'scripts/**/*',
4438
rules: {

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
node_modules
22
npm-debug.log
3-
lib/implementedProperties.js
4-
lib/properties.js
53
coverage

lib/CSSStyleDeclaration.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
var CSSOM = require('cssom');
77
var allProperties = require('./allProperties');
88
var allExtraProperties = require('./allExtraProperties');
9-
var implementedProperties = require('./implementedProperties');
10-
var { dashedToCamelCase } = require('./parsers');
9+
const { camelToDashed, dashedToCamelCase } = require('./parsers');
10+
const fs = require('fs');
11+
const path = require('path');
1112
var getBasicPropertyDescriptor = require('./utils/getBasicPropertyDescriptor');
1213

1314
/**
@@ -239,7 +240,18 @@ Object.defineProperties(CSSStyleDeclaration.prototype, {
239240
},
240241
});
241242

242-
require('./properties')(CSSStyleDeclaration.prototype);
243+
const implementedProperties = fs
244+
.readdirSync(path.resolve(__dirname, 'properties'))
245+
.reduce((props, filename) => {
246+
const { definition } = require(`./properties/${filename}`);
247+
const { name: camelCaseName } = path.parse(filename);
248+
const dashedCaseName = camelToDashed(camelCaseName);
249+
Object.defineProperty(CSSStyleDeclaration.prototype, camelCaseName, definition);
250+
Object.defineProperty(CSSStyleDeclaration.prototype, dashedCaseName, definition);
251+
return props.add(dashedCaseName);
252+
}, new Set());
253+
254+
module.exports.implementedProperties = implementedProperties;
243255

244256
allProperties.forEach(function(property) {
245257
if (!implementedProperties.has(property)) {

lib/CSSStyleDeclaration.test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
'use strict';
22

3-
var { CSSStyleDeclaration } = require('./CSSStyleDeclaration');
3+
const { CSSStyleDeclaration, implementedProperties } = require('./CSSStyleDeclaration');
44

55
var allProperties = require('./allProperties');
66
var allExtraProperties = require('./allExtraProperties');
7-
var implementedProperties = require('./implementedProperties');
87
var parsers = require('./parsers');
98

109
var dashedProperties = [...allProperties, ...allExtraProperties];
1110
var allowedProperties = dashedProperties.map(parsers.dashedToCamelCase);
12-
implementedProperties = Array.from(implementedProperties).map(parsers.dashedToCamelCase);
13-
var invalidProperties = implementedProperties.filter(prop => !allowedProperties.includes(prop));
11+
const invalidProperties = Array.from(implementedProperties).filter(
12+
prop => !allowedProperties.includes(parsers.dashedToCamelCase(prop))
13+
);
1414

1515
describe('CSSStyleDeclaration', () => {
1616
test('has only valid properties implemented', () => {

0 commit comments

Comments
 (0)