@rock-js/config 0.8.13

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 ADDED
@@ -0,0 +1,7 @@
1
+ # @rock-js/config
2
+
3
+ Configuration utilities for Rock (Rock), including autolinking for packages with native code. This package is part of the Rock ecosystem.
4
+
5
+ ## Documentation
6
+
7
+ For detailed documentation about Rock and its tools, visit [Rock Documentation](https://rockjs.dev)
@@ -0,0 +1,2 @@
1
+ export * from './lib/config.js';
2
+ export type { ConfigType as Config } from './lib/config.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,YAAY,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './lib/config.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,69 @@
1
+ import type { FingerprintSources, RemoteBuildCache } from '@rock-js/tools';
2
+ export type PluginOutput = {
3
+ name: string;
4
+ description: string;
5
+ };
6
+ export type PlatformOutput = PluginOutput & {
7
+ autolinkingConfig: {
8
+ project: Record<string, unknown> | undefined;
9
+ };
10
+ };
11
+ export type PluginApi = {
12
+ registerCommand: (command: CommandType) => void;
13
+ getProjectRoot: () => string;
14
+ getReactNativeVersion: () => string;
15
+ getReactNativePath: () => string;
16
+ getPlatforms: () => {
17
+ [platform: string]: object;
18
+ };
19
+ getRemoteCacheProvider: () => Promise<null | undefined | (() => RemoteBuildCache)>;
20
+ getFingerprintOptions: () => FingerprintSources;
21
+ };
22
+ type PluginType = (args: PluginApi) => PluginOutput;
23
+ type PlatformType = (args: PluginApi) => PlatformOutput;
24
+ type ArgValue = string | string[] | boolean;
25
+ type ActionType<T = any> = (...args: T[]) => void | Promise<void>;
26
+ export type CommandType = {
27
+ name: string;
28
+ description: string;
29
+ action: ActionType;
30
+ /** Positional arguments */
31
+ args?: Array<{
32
+ name: string;
33
+ description: string;
34
+ default?: ArgValue | undefined;
35
+ }>;
36
+ /** Flags */
37
+ options?: Array<{
38
+ name: string;
39
+ description: string;
40
+ default?: ArgValue | undefined;
41
+ parse?: (value: string, previous: ArgValue) => ArgValue;
42
+ }>;
43
+ /** Internal property to assign plugin name to particualr commands */
44
+ __origin?: string;
45
+ };
46
+ export type ConfigType = {
47
+ root?: string;
48
+ reactNativeVersion?: string;
49
+ reactNativePath?: string;
50
+ bundler?: PluginType;
51
+ plugins?: PluginType[];
52
+ platforms?: Record<string, PlatformType>;
53
+ commands?: Array<CommandType>;
54
+ remoteCacheProvider?: null | 'github-actions' | (() => RemoteBuildCache);
55
+ fingerprint?: {
56
+ extraSources?: string[];
57
+ ignorePaths?: string[];
58
+ };
59
+ };
60
+ export type ConfigOutput = {
61
+ root: string;
62
+ commands?: Array<CommandType>;
63
+ platforms?: Record<string, PlatformOutput>;
64
+ } & PluginApi;
65
+ export declare function getConfig(dir: string, internalPlugins: Array<(ownConfig: {
66
+ platforms: ConfigOutput['platforms'];
67
+ root: ConfigOutput['root'];
68
+ }) => PluginType>): Promise<ConfigOutput>;
69
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import * as fs from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import * as path from 'node:path';
4
+ import { pathToFileURL } from 'node:url';
5
+ import { colorLink, logger } from '@rock-js/tools';
6
+ import { ConfigTypeSchema } from './schema.js';
7
+ import { formatValidationError } from './utils.js';
8
+ const extensions = ['.js', '.ts', '.mjs'];
9
+ const importUp = async (dir, name) => {
10
+ const filePath = path.join(dir, name);
11
+ for (const ext of extensions) {
12
+ const filePathWithExt = `${filePath}${ext}`;
13
+ if (fs.existsSync(filePathWithExt)) {
14
+ let config;
15
+ if (ext === '.mjs') {
16
+ config = await import(pathToFileURL(filePathWithExt).href).then((module) => module.default);
17
+ }
18
+ else {
19
+ const require = createRequire(import.meta.url);
20
+ config = require(filePathWithExt);
21
+ }
22
+ return { config, filePathWithExt, configDir: dir };
23
+ }
24
+ }
25
+ const parentDir = path.dirname(dir);
26
+ if (parentDir === dir) {
27
+ throw new Error(`${name} not found in any parent directory of ${dir}`);
28
+ }
29
+ return importUp(parentDir, name);
30
+ };
31
+ export async function getConfig(dir, internalPlugins) {
32
+ const { config, filePathWithExt, configDir } = await importUp(dir, 'rock.config');
33
+ const { error, value: validatedConfig } = ConfigTypeSchema.validate(config);
34
+ if (error) {
35
+ logger.error(`Invalid ${colorLink(path.relative(configDir, filePathWithExt))} file:\n` + formatValidationError(config, error));
36
+ process.exit(1);
37
+ }
38
+ const projectRoot = validatedConfig.root
39
+ ? path.resolve(configDir, validatedConfig.root)
40
+ : configDir;
41
+ if (!fs.existsSync(projectRoot)) {
42
+ logger.error(`Project root ${projectRoot} does not exist. Please check your config file.`);
43
+ process.exit(1);
44
+ }
45
+ const api = {
46
+ registerCommand: (command) => {
47
+ validatedConfig.commands = [...(validatedConfig.commands || []), command];
48
+ },
49
+ getProjectRoot: () => projectRoot,
50
+ getReactNativeVersion: () => getReactNativeVersion(projectRoot),
51
+ getReactNativePath: () => resolveReactNativePath(projectRoot),
52
+ getPlatforms: () => validatedConfig.platforms,
53
+ getRemoteCacheProvider: async () => {
54
+ // special case for github-actions
55
+ if (validatedConfig.remoteCacheProvider === 'github-actions') {
56
+ const { providerGitHub } = await import('@rock-js/provider-github');
57
+ return providerGitHub();
58
+ }
59
+ return validatedConfig.remoteCacheProvider;
60
+ },
61
+ getFingerprintOptions: () => validatedConfig.fingerprint,
62
+ };
63
+ const platforms = {};
64
+ if (validatedConfig.platforms) {
65
+ // platforms register commands and custom platform functionality (TBD)
66
+ for (const platform in validatedConfig.platforms) {
67
+ const platformOutput = validatedConfig.platforms[platform](api);
68
+ platforms[platform] = platformOutput;
69
+ }
70
+ }
71
+ if (validatedConfig.plugins) {
72
+ // plugins register commands
73
+ for (const plugin of validatedConfig.plugins) {
74
+ assignOriginToCommand(plugin, api, validatedConfig);
75
+ }
76
+ }
77
+ if (validatedConfig.bundler) {
78
+ assignOriginToCommand(validatedConfig.bundler, api, validatedConfig);
79
+ }
80
+ for (const internalPlugin of internalPlugins) {
81
+ assignOriginToCommand(internalPlugin({ root: projectRoot, platforms }), api, validatedConfig);
82
+ }
83
+ const outputConfig = {
84
+ root: projectRoot,
85
+ commands: validatedConfig.commands ?? [],
86
+ platforms: platforms ?? {},
87
+ ...api,
88
+ };
89
+ return outputConfig;
90
+ }
91
+ function getReactNativeVersion(root) {
92
+ try {
93
+ const require = createRequire(import.meta.url);
94
+ return JSON.parse(fs.readFileSync(path.join(require.resolve('react-native', { paths: [root] }), '..', 'package.json'), 'utf-8')).version;
95
+ }
96
+ catch {
97
+ return 'unknown';
98
+ }
99
+ }
100
+ function resolveReactNativePath(root) {
101
+ const require = createRequire(import.meta.url);
102
+ return path.join(require.resolve('react-native', { paths: [root] }), '..');
103
+ }
104
+ /**
105
+ *
106
+ * Assigns __origin property to each command in the config for later use in error handling.
107
+ */
108
+ function assignOriginToCommand(plugin, api, config) {
109
+ const len = config.commands?.length ?? 0;
110
+ const { name } = plugin(api);
111
+ const newlen = config.commands?.length ?? 0;
112
+ for (let i = len; i < newlen; i++) {
113
+ if (config.commands?.[i]) {
114
+ config.commands[i].__origin = name;
115
+ }
116
+ }
117
+ }
118
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import Joi from 'joi';
2
+ declare const ConfigTypeSchema: Joi.ObjectSchema<any>;
3
+ export { ConfigTypeSchema };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/lib/schema.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAkCtB,QAAA,MAAM,gBAAgB,uBAsBL,CAAC;AAElB,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,45 @@
1
+ import Joi from 'joi';
2
+ const ArgValueSchema = Joi.alternatives().try(Joi.string(), Joi.array().items(Joi.string()), Joi.number(), Joi.boolean());
3
+ const CommandTypeSchema = Joi.object({
4
+ name: Joi.string().required(),
5
+ description: Joi.string().required(),
6
+ action: Joi.function().required(),
7
+ args: Joi.array()
8
+ .items(Joi.object({
9
+ name: Joi.string().required(),
10
+ description: Joi.string().required(),
11
+ default: ArgValueSchema.optional(),
12
+ }))
13
+ .optional(),
14
+ options: Joi.array()
15
+ .items(Joi.object({
16
+ name: Joi.string().required(),
17
+ description: Joi.string().required(),
18
+ default: ArgValueSchema.optional(),
19
+ parse: Joi.function().optional(),
20
+ }))
21
+ .optional(),
22
+ }).unknown(false);
23
+ const ConfigTypeSchema = Joi.object({
24
+ root: Joi.string().optional(),
25
+ reactNativeVersion: Joi.string().optional(),
26
+ reactNativePath: Joi.string().optional(),
27
+ bundler: Joi.function().optional(),
28
+ plugins: Joi.array().items(Joi.function()).optional(),
29
+ platforms: Joi.object().pattern(Joi.string(), Joi.function()).optional(),
30
+ commands: Joi.array().items(CommandTypeSchema).optional(),
31
+ remoteCacheProvider: Joi.alternatives()
32
+ .try(Joi.string().valid('github-actions'), Joi.function(), Joi.any().valid(null))
33
+ .optional(),
34
+ fingerprint: Joi.object({
35
+ extraSources: Joi.array().items(Joi.string()).default([]),
36
+ ignorePaths: Joi.array().items(Joi.string()).default([]),
37
+ })
38
+ .default({
39
+ extraSources: [],
40
+ ignorePaths: [],
41
+ })
42
+ .optional(),
43
+ }).unknown(false);
44
+ export { ConfigTypeSchema };
45
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/lib/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function formatValidationError(config: unknown, error: any): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,GAAG,MAAM,CAsCzE"}
@@ -0,0 +1,30 @@
1
+ import { codeFrameColumns } from '@babel/code-frame';
2
+ export function formatValidationError(config, error) {
3
+ // Functions by default are replaced with null in the preview, so we replace them with [Function]
4
+ const configReplacer = (_, value) => {
5
+ if (typeof value === 'function') {
6
+ return '[Function]';
7
+ }
8
+ if (Array.isArray(value) &&
9
+ value.some((item) => typeof item === 'function')) {
10
+ return value.map((item) => typeof item === 'function' ? '[Function]' : item);
11
+ }
12
+ return value;
13
+ };
14
+ const errorDetails = error.details[0];
15
+ const path = errorDetails.path;
16
+ const configString = JSON.stringify(config, configReplacer, 2);
17
+ const lines = configString.split('\n');
18
+ const lastPathKey = path[path.length - 1];
19
+ let line = 1;
20
+ let column = 0;
21
+ for (let i = 0; i < lines.length; i++) {
22
+ if (lines[i].includes(`"${lastPathKey}"`)) {
23
+ line = i + 1;
24
+ column = lines[i].indexOf(`"${lastPathKey}"`) + 1;
25
+ break;
26
+ }
27
+ }
28
+ return codeFrameColumns(configString, { start: { line, column } }, { message: error.message, highlightCode: true });
29
+ }
30
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,UAAU,qBAAqB,CAAC,MAAe,EAAE,KAAU;IAC/D,iGAAiG;IACjG,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,KAAc,EAAE,EAAE;QACnD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,IACE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,EAChD,CAAC;YACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CACjD,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1C,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CACrB,YAAY,EACZ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAC3B,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAChD,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@rock-js/config",
3
+ "version": "0.8.13",
4
+ "type": "module",
5
+ "types": "./dist/src/index.d.ts",
6
+ "exports": {
7
+ "types": "./dist/src/index.d.ts",
8
+ "default": "./dist/src/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc -p tsconfig.lib.json",
15
+ "dev": "tsc -p tsconfig.lib.json --watch",
16
+ "publish:npm": "npm publish --access public",
17
+ "publish:verdaccio": "npm publish --registry http://localhost:4873 --userconfig ../../.npmrc"
18
+ },
19
+ "dependencies": {
20
+ "@babel/code-frame": "^7.26.2",
21
+ "@rock-js/provider-github": "^0.8.13",
22
+ "@rock-js/tools": "^0.8.13",
23
+ "joi": "^17.13.3",
24
+ "tslib": "^2.3.0"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "devDependencies": {
30
+ "@types/babel__code-frame": "^7.0.6",
31
+ "@rock-js/test-helpers": "^0.8.13"
32
+ }
33
+ }