Merge branch 'master' of github.com:backstage/backstage into seant-splunk/awsS3_readTree_processor
Signed-off-by: Sean Tan <seant@splunk.com>
This commit is contained in:
@@ -22,8 +22,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -35,9 +35,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
"dependencies": {
|
||||
"@asyncapi/react-component": "^0.23.0",
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog": "^0.6.14",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
@@ -52,9 +52,9 @@
|
||||
"swagger-ui-react": "^3.37.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
Vendored
+1
-1
@@ -48,7 +48,7 @@ export interface Config {
|
||||
entryPoint: string;
|
||||
logoutUrl?: string;
|
||||
issuer: string;
|
||||
cert?: string;
|
||||
cert: string;
|
||||
privateKey?: string;
|
||||
decryptionPvk?: string;
|
||||
signatureAlgorithm?: 'sha256' | 'sha512';
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
"passport-oauth2": "^1.5.0",
|
||||
"passport-okta-oauth": "^0.0.1",
|
||||
"passport-onelogin-oauth": "^0.0.1",
|
||||
"passport-saml": "^2.0.0",
|
||||
"passport-saml": "^3.1.2",
|
||||
"uuid": "^8.0.0",
|
||||
"winston": "^3.2.1",
|
||||
"yn": "^4.0.0"
|
||||
@@ -78,7 +78,7 @@
|
||||
"@types/passport-github2": "^1.2.4",
|
||||
"@types/passport-google-oauth20": "^2.0.3",
|
||||
"@types/passport-microsoft": "^0.0.0",
|
||||
"@types/passport-saml": "^1.1.2",
|
||||
"@types/passport-saml": "^1.1.3",
|
||||
"@types/passport-strategy": "^0.2.35",
|
||||
"@types/xml2js": "^0.4.7",
|
||||
"msw": "^0.29.0"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
import { GitlabAuthProvider, gitlabDefaultSignInResolver } from './provider';
|
||||
import * as helpers from '../../lib/passport/PassportStrategyHelper';
|
||||
import { PassportProfile } from '../../lib/passport/types';
|
||||
import { OAuthResult } from '../../lib/oauth';
|
||||
import { getVoidLogger } from '@backstage/backend-common';
|
||||
import { TokenIssuer } from '../../identity';
|
||||
@@ -27,6 +28,33 @@ const mockFrameHandler = jest.spyOn(
|
||||
) as unknown as jest.MockedFunction<() => Promise<{ result: OAuthResult }>>;
|
||||
|
||||
describe('GitlabAuthProvider', () => {
|
||||
const tokenIssuer = {
|
||||
issueToken: jest.fn(),
|
||||
listPublicKeys: jest.fn(),
|
||||
};
|
||||
const catalogIdentityClient = {
|
||||
findUser: jest.fn(),
|
||||
};
|
||||
|
||||
const provider = new GitlabAuthProvider({
|
||||
clientId: 'mock',
|
||||
clientSecret: 'mock',
|
||||
callbackUrl: 'mock',
|
||||
baseUrl: 'mock',
|
||||
catalogIdentityClient:
|
||||
catalogIdentityClient as unknown as CatalogIdentityClient,
|
||||
tokenIssuer: tokenIssuer as unknown as TokenIssuer,
|
||||
authHandler: async ({ fullProfile }) => ({
|
||||
profile: {
|
||||
email: fullProfile.emails![0]!.value,
|
||||
displayName: fullProfile.displayName,
|
||||
picture: 'http://gitlab.com/lols',
|
||||
},
|
||||
}),
|
||||
signInResolver: gitlabDefaultSignInResolver,
|
||||
logger: getVoidLogger(),
|
||||
});
|
||||
|
||||
it('should transform to type OAuthResponse', async () => {
|
||||
const tests = [
|
||||
{
|
||||
@@ -117,36 +145,62 @@ describe('GitlabAuthProvider', () => {
|
||||
},
|
||||
];
|
||||
|
||||
const tokenIssuer = {
|
||||
issueToken: jest.fn(),
|
||||
listPublicKeys: jest.fn(),
|
||||
};
|
||||
const catalogIdentityClient = {
|
||||
findUser: jest.fn(),
|
||||
};
|
||||
|
||||
const provider = new GitlabAuthProvider({
|
||||
clientId: 'mock',
|
||||
clientSecret: 'mock',
|
||||
callbackUrl: 'mock',
|
||||
baseUrl: 'mock',
|
||||
catalogIdentityClient:
|
||||
catalogIdentityClient as unknown as CatalogIdentityClient,
|
||||
tokenIssuer: tokenIssuer as unknown as TokenIssuer,
|
||||
authHandler: async ({ fullProfile }) => ({
|
||||
profile: {
|
||||
email: fullProfile.emails![0]!.value,
|
||||
displayName: fullProfile.displayName,
|
||||
picture: 'http://gitlab.com/lols',
|
||||
},
|
||||
}),
|
||||
signInResolver: gitlabDefaultSignInResolver,
|
||||
logger: getVoidLogger(),
|
||||
});
|
||||
for (const test of tests) {
|
||||
mockFrameHandler.mockResolvedValueOnce(test.input);
|
||||
const { response } = await provider.handler({} as any);
|
||||
expect(response).toEqual(test.expect);
|
||||
}
|
||||
});
|
||||
|
||||
it('should forward a new refresh token on refresh', async () => {
|
||||
const mockRefreshToken = jest.spyOn(
|
||||
helpers,
|
||||
'executeRefreshTokenStrategy',
|
||||
) as unknown as jest.MockedFunction<() => Promise<{}>>;
|
||||
|
||||
mockRefreshToken.mockResolvedValueOnce({
|
||||
accessToken: 'a.b.c',
|
||||
refreshToken: 'dont-forget-to-send-refresh',
|
||||
params: {
|
||||
id_token: 'my-id',
|
||||
scope: 'read_user',
|
||||
},
|
||||
});
|
||||
|
||||
const mockUserProfile = jest.spyOn(
|
||||
helpers,
|
||||
'executeFetchUserProfileStrategy',
|
||||
) as unknown as jest.MockedFunction<() => Promise<PassportProfile>>;
|
||||
|
||||
mockUserProfile.mockResolvedValueOnce({
|
||||
id: 'uid-my-id',
|
||||
username: 'mockuser',
|
||||
provider: 'gitlab',
|
||||
displayName: 'Mocked User',
|
||||
emails: [
|
||||
{
|
||||
value: 'mockuser@gmail.com',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const response = await provider.refresh({} as any);
|
||||
|
||||
expect(response).toEqual({
|
||||
backstageIdentity: {
|
||||
id: 'mockuser',
|
||||
},
|
||||
profile: {
|
||||
displayName: 'Mocked User',
|
||||
email: 'mockuser@gmail.com',
|
||||
picture: 'http://gitlab.com/lols',
|
||||
},
|
||||
providerInfo: {
|
||||
accessToken: 'a.b.c',
|
||||
idToken: 'my-id',
|
||||
refreshToken: 'dont-forget-to-send-refresh',
|
||||
scope: 'read_user',
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -177,6 +177,7 @@ export class GitlabAuthProvider implements OAuthHandlers {
|
||||
providerInfo: {
|
||||
idToken: result.params.id_token,
|
||||
accessToken: result.accessToken,
|
||||
refreshToken: result.refreshToken, // GitLab expires the old refresh token when used
|
||||
scope: result.params.scope,
|
||||
expiresInSeconds: result.params.expires_in,
|
||||
},
|
||||
|
||||
@@ -157,6 +157,11 @@ export class OidcAuthProvider implements OAuthHandlers {
|
||||
userinfo: UserinfoResponse,
|
||||
done: PassportDoneCallback<AuthResult, PrivateInfo>,
|
||||
) => {
|
||||
if (typeof done !== 'function') {
|
||||
throw new Error(
|
||||
'OIDC IdP must provide a userinfo_endpoint in the metadata response',
|
||||
);
|
||||
}
|
||||
done(
|
||||
undefined,
|
||||
{ tokenset, userinfo },
|
||||
|
||||
@@ -119,13 +119,13 @@ export type SamlProviderOptions = {};
|
||||
export const createSamlProvider = (
|
||||
_options?: SamlProviderOptions,
|
||||
): AuthProviderFactory => {
|
||||
return ({ providerId, globalConfig, config, tokenIssuer, logger }) => {
|
||||
return ({ providerId, globalConfig, config, tokenIssuer }) => {
|
||||
const opts = {
|
||||
callbackUrl: `${globalConfig.baseUrl}/${providerId}/handler/frame`,
|
||||
entryPoint: config.getString('entryPoint'),
|
||||
logoutUrl: config.getOptionalString('logoutUrl'),
|
||||
issuer: config.getString('issuer'),
|
||||
cert: config.getOptionalString('cert'),
|
||||
cert: config.getString('cert'),
|
||||
privateCert: config.getOptionalString('privateKey'),
|
||||
decryptionPvk: config.getOptionalString('decryptionPvk'),
|
||||
signatureAlgorithm: config.getOptionalString('signatureAlgorithm') as
|
||||
@@ -138,17 +138,6 @@ export const createSamlProvider = (
|
||||
appUrl: globalConfig.appUrl,
|
||||
};
|
||||
|
||||
// passport-saml will return an error if the `cert` key is set, and the value is empty.
|
||||
// Since we read from config (such as environment variables) an empty string should be equal to being unset.
|
||||
if (!opts.cert) {
|
||||
logger.warn(
|
||||
'SamlAuthProvider was initialized without a cert configuration parameter. ' +
|
||||
'This will soon be required by the underlying passport-saml library, which may soon lead to failures to start the auth backend. ' +
|
||||
'Please add an "auth.saml.cert" config parameter.',
|
||||
);
|
||||
delete opts.cert;
|
||||
}
|
||||
|
||||
return new SamlAuthProvider(opts);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
@@ -35,9 +35,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -38,9 +38,9 @@
|
||||
"recharts": "^1.8.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -1,5 +1,48 @@
|
||||
# @backstage/plugin-catalog-backend
|
||||
|
||||
## 0.13.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ce17a1693: Allow the catalog search collator to filter the entities that it indexes
|
||||
- dbb952787: Use `ScmIntegrationRegistry#resolveUrl` in the placeholder processors instead of a custom implementation.
|
||||
|
||||
If you manually instantiate the `PlaceholderProcessor` (you most probably don't), add the new required constructor parameter:
|
||||
|
||||
```diff
|
||||
+ import { ScmIntegrations } from '@backstage/integration';
|
||||
// ...
|
||||
+ const integrations = ScmIntegrations.fromConfig(config);
|
||||
// ...
|
||||
new PlaceholderProcessor({
|
||||
resolvers: placeholderResolvers,
|
||||
reader,
|
||||
+ integrations,
|
||||
});
|
||||
```
|
||||
|
||||
All custom `PlaceholderResolver` can use the new `resolveUrl` parameter to resolve relative URLs.
|
||||
|
||||
- 1797c5ce5: This change drops support for deprecated location types which have all been replaced by the `url` type.
|
||||
There has been a deprecation warning in place since the beginning of this year so most should already be migrated and received information at this point.
|
||||
|
||||
The now removed location types are:
|
||||
|
||||
```
|
||||
github
|
||||
github/api
|
||||
bitbucket/api
|
||||
gitlab/api
|
||||
azure/api
|
||||
```
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-client@0.3.19
|
||||
- @backstage/catalog-model@0.9.2
|
||||
- @backstage/errors@0.1.2
|
||||
- @backstage/config@0.1.9
|
||||
- @backstage/backend-common@0.9.2
|
||||
|
||||
## 0.13.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -40,6 +40,36 @@ export type AddLocationResult = {
|
||||
entities: Entity[];
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "AnalyzeLocationEntityField" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type AnalyzeLocationEntityField = {
|
||||
field: string;
|
||||
state:
|
||||
| 'analysisSuggestedValue'
|
||||
| 'analysisSuggestedNoValue'
|
||||
| 'needsUserInput';
|
||||
value: string | null;
|
||||
description: string;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "AnalyzeLocationExistingEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type AnalyzeLocationExistingEntity = {
|
||||
location: LocationSpec;
|
||||
isRegistered: boolean;
|
||||
entity: Entity;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "AnalyzeLocationGenerateEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type AnalyzeLocationGenerateEntity = {
|
||||
entity: RecursivePartial<Entity>;
|
||||
fields: AnalyzeLocationEntityField[];
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "AnalyzeLocationRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -111,8 +141,6 @@ export class AwsOrganizationCloudAccountProcessor implements CatalogProcessor {
|
||||
normalizeName(name: string): string;
|
||||
// (undocumented)
|
||||
organizations: Organizations;
|
||||
// Warning: (ae-forgotten-export) The symbol "AwsOrganizationProviderConfig" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
provider: AwsOrganizationProviderConfig;
|
||||
// (undocumented)
|
||||
@@ -123,6 +151,7 @@ export class AwsOrganizationCloudAccountProcessor implements CatalogProcessor {
|
||||
): Promise<boolean>;
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
// Warning: (ae-missing-release-tag) "AwsS3DiscoveryProcessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -136,6 +165,14 @@ export class AwsS3DiscoveryProcessor implements CatalogProcessor {
|
||||
parser: CatalogProcessorParser,
|
||||
): Promise<boolean>;
|
||||
}
|
||||
=======
|
||||
// Warning: (ae-missing-release-tag) "AwsOrganizationProviderConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public
|
||||
export type AwsOrganizationProviderConfig = {
|
||||
roleArn?: string;
|
||||
};
|
||||
>>>>>>> 11da7e59e940bb91e61c3b0d2db6ec7d38ce0126
|
||||
|
||||
// Warning: (ae-missing-release-tag) "BitbucketDiscoveryProcessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
@@ -200,8 +237,6 @@ export class CatalogBuilder {
|
||||
higherOrderOperation: HigherOrderOperation;
|
||||
locationAnalyzer: LocationAnalyzer;
|
||||
}>;
|
||||
// Warning: (ae-forgotten-export) The symbol "CatalogEnvironment" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
static create(env: CatalogEnvironment): Promise<NextCatalogBuilder>;
|
||||
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
@@ -220,6 +255,42 @@ export class CatalogBuilder {
|
||||
): CatalogBuilder;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "CatalogEntityDocument" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export interface CatalogEntityDocument extends IndexableDocument {
|
||||
// (undocumented)
|
||||
componentType: string;
|
||||
// (undocumented)
|
||||
kind: string;
|
||||
// (undocumented)
|
||||
lifecycle: string;
|
||||
// (undocumented)
|
||||
namespace: string;
|
||||
// (undocumented)
|
||||
owner: string;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "CatalogEnvironment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type CatalogEnvironment = {
|
||||
logger: Logger_2;
|
||||
database: PluginDatabaseManager;
|
||||
config: Config;
|
||||
reader: UrlReader;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "CatalogProcessingEngine" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export interface CatalogProcessingEngine {
|
||||
// (undocumented)
|
||||
start(): Promise<void>;
|
||||
// (undocumented)
|
||||
stop(): Promise<void>;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "CatalogProcessingOrchestrator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -346,15 +417,11 @@ export class CommonDatabase implements Database {
|
||||
txOpaque: Transaction,
|
||||
request: DbEntityRequest[],
|
||||
): Promise<DbEntityResponse[]>;
|
||||
// Warning: (ae-forgotten-export) The symbol "DbLocationsRow" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
addLocation(
|
||||
txOpaque: Transaction,
|
||||
location: Location_2,
|
||||
): Promise<DbLocationsRow>;
|
||||
// Warning: (ae-forgotten-export) The symbol "DatabaseLocationUpdateLogStatus" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
addLocationUpdateLogEvent(
|
||||
locationId: string,
|
||||
@@ -362,9 +429,6 @@ export class CommonDatabase implements Database {
|
||||
entityName?: string | string[],
|
||||
message?: string,
|
||||
): Promise<void>;
|
||||
// Warning: (ae-forgotten-export) The symbol "DbEntitiesRequest" needs to be exported by the entry point index.d.ts
|
||||
// Warning: (ae-forgotten-export) The symbol "DbEntitiesResponse" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
entities(
|
||||
txOpaque: Transaction,
|
||||
@@ -380,12 +444,8 @@ export class CommonDatabase implements Database {
|
||||
txOpaque: Transaction,
|
||||
uid: string,
|
||||
): Promise<DbEntityResponse | undefined>;
|
||||
// Warning: (ae-forgotten-export) The symbol "DbLocationsRowWithStatus" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
location(id: string): Promise<DbLocationsRowWithStatus>;
|
||||
// Warning: (ae-forgotten-export) The symbol "DatabaseLocationUpdateLogEvent" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
locationHistory(id: string): Promise<DatabaseLocationUpdateLogEvent[]>;
|
||||
// (undocumented)
|
||||
@@ -411,12 +471,18 @@ export class CommonDatabase implements Database {
|
||||
): Promise<DbEntityResponse>;
|
||||
}
|
||||
|
||||
// Warning: (ae-forgotten-export) The symbol "RouterOptions" needs to be exported by the entry point index.d.ts
|
||||
// Warning: (ae-missing-release-tag) "CreateDatabaseOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type CreateDatabaseOptions = {
|
||||
logger: Logger_2;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "createNextRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export function createNextRouter(
|
||||
options: RouterOptions_2,
|
||||
options: NextRouterOptions,
|
||||
): Promise<express.Router>;
|
||||
|
||||
// Warning: (tsdoc-escape-right-brace) The "}" character should be escaped using a backslash to avoid confusion with a TSDoc inline tag
|
||||
@@ -485,9 +551,6 @@ export type Database = {
|
||||
// @public (undocumented)
|
||||
export class DatabaseEntitiesCatalog implements EntitiesCatalog {
|
||||
constructor(database: Database, logger: Logger_2);
|
||||
// Warning: (ae-forgotten-export) The symbol "EntityUpsertRequest" needs to be exported by the entry point index.d.ts
|
||||
// Warning: (ae-forgotten-export) The symbol "EntityUpsertResponse" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
batchAddOrUpdateEntities(
|
||||
requests: EntityUpsertRequest[],
|
||||
@@ -497,9 +560,6 @@ export class DatabaseEntitiesCatalog implements EntitiesCatalog {
|
||||
outputEntities?: boolean;
|
||||
},
|
||||
): Promise<EntityUpsertResponse[]>;
|
||||
// Warning: (ae-forgotten-export) The symbol "EntitiesRequest" needs to be exported by the entry point index.d.ts
|
||||
// Warning: (ae-forgotten-export) The symbol "EntitiesResponse" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
entities(request?: EntitiesRequest): Promise<EntitiesResponse>;
|
||||
// (undocumented)
|
||||
@@ -517,8 +577,6 @@ export class DatabaseLocationsCatalog implements LocationsCatalog {
|
||||
location(id: string): Promise<LocationResponse>;
|
||||
// (undocumented)
|
||||
locationHistory(id: string): Promise<DatabaseLocationUpdateLogEvent[]>;
|
||||
// Warning: (ae-forgotten-export) The symbol "LocationResponse" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
locations(): Promise<LocationResponse[]>;
|
||||
// (undocumented)
|
||||
@@ -536,12 +594,32 @@ export class DatabaseLocationsCatalog implements LocationsCatalog {
|
||||
removeLocation(id: string): Promise<void>;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DatabaseLocationUpdateLogEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type DatabaseLocationUpdateLogEvent = {
|
||||
id: string;
|
||||
status: DatabaseLocationUpdateLogStatus;
|
||||
location_id: string;
|
||||
entity_name: string;
|
||||
created_at?: string;
|
||||
message?: string;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DatabaseLocationUpdateLogStatus" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export enum DatabaseLocationUpdateLogStatus {
|
||||
// (undocumented)
|
||||
FAIL = 'fail',
|
||||
// (undocumented)
|
||||
SUCCESS = 'success',
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DatabaseManager" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export class DatabaseManager {
|
||||
// Warning: (ae-forgotten-export) The symbol "CreateDatabaseOptions" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
static createDatabase(
|
||||
knex: Knex,
|
||||
@@ -557,6 +635,22 @@ export class DatabaseManager {
|
||||
static createTestDatabaseConnection(): Promise<Knex>;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DbEntitiesRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type DbEntitiesRequest = {
|
||||
filter?: EntityFilter;
|
||||
pagination?: EntityPagination;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DbEntitiesResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type DbEntitiesResponse = {
|
||||
entities: DbEntityResponse[];
|
||||
pageInfo: DbPageInfo;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DbEntityRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -574,6 +668,36 @@ export type DbEntityResponse = {
|
||||
entity: Entity;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DbLocationsRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type DbLocationsRow = {
|
||||
id: string;
|
||||
type: string;
|
||||
target: string;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DbLocationsRowWithStatus" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type DbLocationsRowWithStatus = DbLocationsRow & {
|
||||
status: string | null;
|
||||
timestamp: string | null;
|
||||
message: string | null;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DbPageInfo" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type DbPageInfo =
|
||||
| {
|
||||
hasNextPage: false;
|
||||
}
|
||||
| {
|
||||
hasNextPage: true;
|
||||
endCursor: string;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DefaultCatalogCollator" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -598,8 +722,6 @@ export class DefaultCatalogCollator implements DocumentCollator {
|
||||
protected readonly catalogClient: CatalogApi;
|
||||
// (undocumented)
|
||||
protected discovery: PluginEndpointDiscovery;
|
||||
// Warning: (ae-forgotten-export) The symbol "CatalogEntityDocument" needs to be exported by the entry point index.d.ts
|
||||
//
|
||||
// (undocumented)
|
||||
execute(): Promise<CatalogEntityDocument[]>;
|
||||
// (undocumented)
|
||||
@@ -635,6 +757,14 @@ export class DefaultCatalogProcessingOrchestrator
|
||||
process(request: EntityProcessingRequest): Promise<EntityProcessingResult>;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DeferredEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type DeferredEntity = {
|
||||
entity: Entity;
|
||||
locationKey?: string;
|
||||
};
|
||||
|
||||
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// Warning: (ae-missing-release-tag) "durationText" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
@@ -657,6 +787,23 @@ export type EntitiesCatalog = {
|
||||
): Promise<EntityUpsertResponse[]>;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "EntitiesRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type EntitiesRequest = {
|
||||
filter?: EntityFilter;
|
||||
fields?: (entity: Entity) => Entity;
|
||||
pagination?: EntityPagination;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "EntitiesResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type EntitiesResponse = {
|
||||
entities: Entity[];
|
||||
pageInfo: PageInfo;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "EntitiesSearchFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public
|
||||
@@ -749,6 +896,22 @@ export type EntityProviderMutation =
|
||||
removed: DeferredEntity[];
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "EntityUpsertRequest" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type EntityUpsertRequest = {
|
||||
entity: Entity;
|
||||
relations: EntityRelationSpec[];
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "EntityUpsertResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type EntityUpsertResponse = {
|
||||
entityId: string;
|
||||
entity?: Entity;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "FileReaderProcessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -914,8 +1077,7 @@ export type LocationAnalyzer = {
|
||||
//
|
||||
// @public (undocumented)
|
||||
export class LocationEntityProcessor implements CatalogProcessor {
|
||||
// Warning: (ae-forgotten-export) The symbol "Options" needs to be exported by the entry point index.d.ts
|
||||
constructor(options: Options_3);
|
||||
constructor(options: LocationEntityProcessorOptions);
|
||||
// (undocumented)
|
||||
postProcessEntity(
|
||||
entity: Entity,
|
||||
@@ -924,6 +1086,13 @@ export class LocationEntityProcessor implements CatalogProcessor {
|
||||
): Promise<Entity>;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "LocationEntityProcessorOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type LocationEntityProcessorOptions = {
|
||||
integrations: ScmIntegrationRegistry;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "LocationReader" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -941,6 +1110,14 @@ export class LocationReaders implements LocationReader {
|
||||
read(location: LocationSpec): Promise<ReadLocationResult>;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "LocationResponse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type LocationResponse = {
|
||||
data: Location_2;
|
||||
currentStatus: LocationUpdateStatus;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "LocationsCatalog" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -961,12 +1138,66 @@ export type LocationsCatalog = {
|
||||
): Promise<void>;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "LocationService" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export interface LocationService {
|
||||
// (undocumented)
|
||||
createLocation(
|
||||
spec: LocationSpec,
|
||||
dryRun: boolean,
|
||||
): Promise<{
|
||||
location: Location_2;
|
||||
entities: Entity[];
|
||||
}>;
|
||||
// (undocumented)
|
||||
deleteLocation(id: string): Promise<void>;
|
||||
// (undocumented)
|
||||
getLocation(id: string): Promise<Location_2>;
|
||||
// (undocumented)
|
||||
listLocations(): Promise<Location_2[]>;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "LocationStore" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export interface LocationStore {
|
||||
// (undocumented)
|
||||
createLocation(spec: LocationSpec): Promise<Location_2>;
|
||||
// (undocumented)
|
||||
deleteLocation(id: string): Promise<void>;
|
||||
// (undocumented)
|
||||
getLocation(id: string): Promise<Location_2>;
|
||||
// (undocumented)
|
||||
listLocations(): Promise<Location_2[]>;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "LocationUpdateLogEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type LocationUpdateLogEvent = {
|
||||
id: string;
|
||||
status: 'fail' | 'success';
|
||||
location_id: string;
|
||||
entity_name: string;
|
||||
created_at?: string;
|
||||
message?: string;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "LocationUpdateStatus" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type LocationUpdateStatus = {
|
||||
timestamp: string | null;
|
||||
status: string | null;
|
||||
message: string | null;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "NextCatalogBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public
|
||||
export class NextCatalogBuilder {
|
||||
// Warning: (ae-forgotten-export) The symbol "CatalogEnvironment" needs to be exported by the entry point index.d.ts
|
||||
constructor(env: CatalogEnvironment_2);
|
||||
constructor(env: CatalogEnvironment);
|
||||
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
addEntityPolicy(...policies: EntityPolicy[]): NextCatalogBuilder;
|
||||
// Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
@@ -1000,6 +1231,22 @@ export class NextCatalogBuilder {
|
||||
setRefreshIntervalSeconds(seconds: number): NextCatalogBuilder;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "NextRouterOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export interface NextRouterOptions {
|
||||
// (undocumented)
|
||||
config: Config;
|
||||
// (undocumented)
|
||||
entitiesCatalog?: EntitiesCatalog;
|
||||
// (undocumented)
|
||||
locationAnalyzer?: LocationAnalyzer;
|
||||
// (undocumented)
|
||||
locationService: LocationService;
|
||||
// (undocumented)
|
||||
logger: Logger_2;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "notFoundError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -1008,6 +1255,18 @@ function notFoundError(
|
||||
message: string,
|
||||
): CatalogProcessorResult;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "PageInfo" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type PageInfo =
|
||||
| {
|
||||
hasNextPage: false;
|
||||
}
|
||||
| {
|
||||
hasNextPage: true;
|
||||
endCursor: string;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "parseEntityYaml" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -1020,20 +1279,51 @@ export function parseEntityYaml(
|
||||
//
|
||||
// @public
|
||||
export class PlaceholderProcessor implements CatalogProcessor {
|
||||
// Warning: (ae-forgotten-export) The symbol "Options" needs to be exported by the entry point index.d.ts
|
||||
constructor(options: Options_4);
|
||||
constructor(options: PlaceholderProcessorOptions);
|
||||
// (undocumented)
|
||||
preProcessEntity(entity: Entity, location: LocationSpec): Promise<Entity>;
|
||||
}
|
||||
|
||||
// Warning: (ae-forgotten-export) The symbol "ResolverParams" needs to be exported by the entry point index.d.ts
|
||||
// Warning: (ae-missing-release-tag) "PlaceholderProcessorOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type PlaceholderProcessorOptions = {
|
||||
resolvers: Record<string, PlaceholderResolver>;
|
||||
reader: UrlReader;
|
||||
integrations: ScmIntegrationRegistry;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "PlaceholderResolver" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type PlaceholderResolver = (
|
||||
params: ResolverParams,
|
||||
params: PlaceholderResolverParams,
|
||||
) => Promise<JsonValue>;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "PlaceholderResolverParams" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type PlaceholderResolverParams = {
|
||||
key: string;
|
||||
value: JsonValue;
|
||||
baseUrl: string;
|
||||
read: PlaceholderResolverRead;
|
||||
resolveUrl: PlaceholderResolverResolveUrl;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "PlaceholderResolverRead" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type PlaceholderResolverRead = (url: string) => Promise<Buffer>;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "PlaceholderResolverResolveUrl" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export type PlaceholderResolverResolveUrl = (
|
||||
url: string,
|
||||
base: string,
|
||||
) => string;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "ReadLocationEntity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
@@ -1146,7 +1436,7 @@ export type Transaction = {
|
||||
// @public (undocumented)
|
||||
export class UrlReaderProcessor implements CatalogProcessor {
|
||||
// Warning: (ae-forgotten-export) The symbol "Options" needs to be exported by the entry point index.d.ts
|
||||
constructor(options: Options_5);
|
||||
constructor(options: Options_3);
|
||||
// (undocumented)
|
||||
readLocation(
|
||||
location: LocationSpec,
|
||||
@@ -1164,7 +1454,6 @@ export class UrlReaderProcessor implements CatalogProcessor {
|
||||
// src/catalog/types.d.ts:43:8 - (tsdoc-param-tag-with-invalid-name) The @param block should be followed by a valid parameter name: The identifier cannot non-word characters
|
||||
// src/catalog/types.d.ts:44:8 - (tsdoc-param-tag-with-invalid-name) The @param block should be followed by a valid parameter name: The identifier cannot non-word characters
|
||||
// src/catalog/types.d.ts:45:8 - (tsdoc-param-tag-with-invalid-name) The @param block should be followed by a valid parameter name: The identifier cannot non-word characters
|
||||
// src/catalog/types.d.ts:75:5 - (ae-forgotten-export) The symbol "LocationUpdateLogEvent" needs to be exported by the entry point index.d.ts
|
||||
// src/database/types.d.ts:125:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// src/database/types.d.ts:131:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// src/database/types.d.ts:132:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
@@ -1193,11 +1482,6 @@ export class UrlReaderProcessor implements CatalogProcessor {
|
||||
// src/ingestion/processors/types.d.ts:58:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// src/ingestion/types.d.ts:17:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// src/ingestion/types.d.ts:41:8 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
|
||||
// src/ingestion/types.d.ts:49:5 - (ae-forgotten-export) The symbol "AnalyzeLocationExistingEntity" needs to be exported by the entry point index.d.ts
|
||||
// src/ingestion/types.d.ts:50:5 - (ae-forgotten-export) The symbol "AnalyzeLocationGenerateEntity" needs to be exported by the entry point index.d.ts
|
||||
// src/next/NextCatalogBuilder.d.ts:147:9 - (ae-forgotten-export) The symbol "CatalogProcessingEngine" needs to be exported by the entry point index.d.ts
|
||||
// src/next/NextCatalogBuilder.d.ts:148:9 - (ae-forgotten-export) The symbol "LocationService" needs to be exported by the entry point index.d.ts
|
||||
// src/next/processing/types.d.ts:11:5 - (ae-forgotten-export) The symbol "DeferredEntity" needs to be exported by the entry point index.d.ts
|
||||
|
||||
// (No @packageDocumentation comment for this package)
|
||||
```
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend",
|
||||
"version": "0.13.6",
|
||||
"version": "0.13.7",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,11 +29,11 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.9.1",
|
||||
"@backstage/catalog-client": "^0.3.18",
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/config": "^0.1.8",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/backend-common": "^0.9.2",
|
||||
"@backstage/catalog-client": "^0.3.19",
|
||||
"@backstage/catalog-model": "^0.9.2",
|
||||
"@backstage/config": "^0.1.9",
|
||||
"@backstage/errors": "^0.1.2",
|
||||
"@backstage/integration": "^0.6.3",
|
||||
"@backstage/plugin-search-backend-node": "^0.4.2",
|
||||
"@backstage/search-common": "^0.2.0",
|
||||
@@ -48,7 +48,7 @@
|
||||
"express-promise-router": "^4.1.0",
|
||||
"fast-json-stable-stringify": "^2.1.0",
|
||||
"fs-extra": "9.1.0",
|
||||
"git-url-parse": "~11.4.4",
|
||||
"git-url-parse": "^11.6.0",
|
||||
"glob": "^7.1.6",
|
||||
"knex": "^0.95.1",
|
||||
"lodash": "^4.17.15",
|
||||
@@ -64,8 +64,8 @@
|
||||
"yup": "^0.29.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/backend-test-utils": "^0.1.6",
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/backend-test-utils": "^0.1.7",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@types/core-js": "^2.5.4",
|
||||
"@types/git-url-parse": "^9.0.0",
|
||||
|
||||
@@ -16,4 +16,15 @@
|
||||
|
||||
export { DatabaseEntitiesCatalog } from './DatabaseEntitiesCatalog';
|
||||
export { DatabaseLocationsCatalog } from './DatabaseLocationsCatalog';
|
||||
export type { EntitiesCatalog, LocationsCatalog } from './types';
|
||||
export type {
|
||||
EntitiesCatalog,
|
||||
LocationsCatalog,
|
||||
EntityUpsertRequest,
|
||||
EntityUpsertResponse,
|
||||
EntitiesRequest,
|
||||
EntitiesResponse,
|
||||
LocationResponse,
|
||||
PageInfo,
|
||||
LocationUpdateLogEvent,
|
||||
LocationUpdateStatus,
|
||||
} from './types';
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
export { CommonDatabase } from './CommonDatabase';
|
||||
export { DatabaseManager } from './DatabaseManager';
|
||||
export type { CreateDatabaseOptions } from './DatabaseManager';
|
||||
export type {
|
||||
Database,
|
||||
DbEntityRequest,
|
||||
@@ -24,4 +25,11 @@ export type {
|
||||
EntityFilter,
|
||||
EntityPagination,
|
||||
Transaction,
|
||||
DbEntitiesRequest,
|
||||
DbEntitiesResponse,
|
||||
DbLocationsRowWithStatus,
|
||||
DatabaseLocationUpdateLogEvent,
|
||||
DbLocationsRow,
|
||||
DatabaseLocationUpdateLogStatus,
|
||||
DbPageInfo,
|
||||
} from './types';
|
||||
|
||||
@@ -16,5 +16,18 @@
|
||||
|
||||
export { HigherOrderOperations } from './HigherOrderOperations';
|
||||
export { LocationReaders } from './LocationReaders';
|
||||
export * from './types';
|
||||
export type {
|
||||
AddLocationResult,
|
||||
AnalyzeLocationRequest,
|
||||
AnalyzeLocationResponse,
|
||||
HigherOrderOperation,
|
||||
LocationAnalyzer,
|
||||
LocationReader,
|
||||
ReadLocationEntity,
|
||||
ReadLocationError,
|
||||
ReadLocationResult,
|
||||
AnalyzeLocationEntityField,
|
||||
AnalyzeLocationExistingEntity,
|
||||
AnalyzeLocationGenerateEntity,
|
||||
} from './types';
|
||||
export * from './processors';
|
||||
|
||||
@@ -38,12 +38,12 @@ export function toAbsoluteUrl(
|
||||
}
|
||||
}
|
||||
|
||||
type Options = {
|
||||
export type LocationEntityProcessorOptions = {
|
||||
integrations: ScmIntegrationRegistry;
|
||||
};
|
||||
|
||||
export class LocationEntityProcessor implements CatalogProcessor {
|
||||
constructor(private readonly options: Options) {}
|
||||
constructor(private readonly options: LocationEntityProcessorOptions) {}
|
||||
|
||||
async postProcessEntity(
|
||||
entity: Entity,
|
||||
|
||||
@@ -15,18 +15,22 @@
|
||||
*/
|
||||
import { UrlReader } from '@backstage/backend-common';
|
||||
import { Entity } from '@backstage/catalog-model';
|
||||
import { ConfigReader } from '@backstage/config';
|
||||
import { ScmIntegrations } from '@backstage/integration';
|
||||
import {
|
||||
jsonPlaceholderResolver,
|
||||
PlaceholderProcessor,
|
||||
PlaceholderResolver,
|
||||
ResolverParams,
|
||||
ResolverRead,
|
||||
PlaceholderResolverParams,
|
||||
PlaceholderResolverRead,
|
||||
textPlaceholderResolver,
|
||||
yamlPlaceholderResolver,
|
||||
} from './PlaceholderProcessor';
|
||||
|
||||
const integrations = ScmIntegrations.fromConfig(new ConfigReader({}));
|
||||
|
||||
describe('PlaceholderProcessor', () => {
|
||||
const read: jest.MockedFunction<ResolverRead> = jest.fn();
|
||||
const read: jest.MockedFunction<PlaceholderResolverRead> = jest.fn();
|
||||
const reader: UrlReader = { read, readTree: jest.fn(), search: jest.fn() };
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -44,6 +48,7 @@ describe('PlaceholderProcessor', () => {
|
||||
foo: async () => 'replaced',
|
||||
},
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
await expect(
|
||||
processor.preProcessEntity(input, { type: 't', target: 'l' }),
|
||||
@@ -59,6 +64,7 @@ describe('PlaceholderProcessor', () => {
|
||||
upper: upperResolver,
|
||||
},
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
|
||||
await expect(
|
||||
@@ -95,6 +101,7 @@ describe('PlaceholderProcessor', () => {
|
||||
bar: jest.fn(),
|
||||
},
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
const entity: Entity = {
|
||||
apiVersion: 'a',
|
||||
@@ -115,6 +122,7 @@ describe('PlaceholderProcessor', () => {
|
||||
bar: jest.fn(),
|
||||
},
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
const entity: Entity = {
|
||||
apiVersion: 'a',
|
||||
@@ -134,6 +142,7 @@ describe('PlaceholderProcessor', () => {
|
||||
const processor = new PlaceholderProcessor({
|
||||
resolvers: { text: textPlaceholderResolver },
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
|
||||
await expect(
|
||||
@@ -169,6 +178,7 @@ describe('PlaceholderProcessor', () => {
|
||||
const processor = new PlaceholderProcessor({
|
||||
resolvers: { json: jsonPlaceholderResolver },
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
|
||||
await expect(
|
||||
@@ -202,6 +212,7 @@ describe('PlaceholderProcessor', () => {
|
||||
const processor = new PlaceholderProcessor({
|
||||
resolvers: { yaml: yamlPlaceholderResolver },
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
|
||||
await expect(
|
||||
@@ -235,6 +246,7 @@ describe('PlaceholderProcessor', () => {
|
||||
const processor = new PlaceholderProcessor({
|
||||
resolvers: { text: textPlaceholderResolver },
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
|
||||
await expect(
|
||||
@@ -272,6 +284,7 @@ describe('PlaceholderProcessor', () => {
|
||||
const processor = new PlaceholderProcessor({
|
||||
resolvers: { text: textPlaceholderResolver },
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
|
||||
await expect(
|
||||
@@ -311,6 +324,7 @@ describe('PlaceholderProcessor', () => {
|
||||
const processor = new PlaceholderProcessor({
|
||||
resolvers: { text: textPlaceholderResolver },
|
||||
reader,
|
||||
integrations,
|
||||
});
|
||||
|
||||
await expect(
|
||||
@@ -331,7 +345,7 @@ describe('PlaceholderProcessor', () => {
|
||||
},
|
||||
),
|
||||
).rejects.toThrow(
|
||||
'Placeholder $text could not form a URL out of ./a/b/catalog-info.yaml and ../c/catalog-info.yaml',
|
||||
'Placeholder $text could not form a URL out of ./a/b/catalog-info.yaml and ../c/catalog-info.yaml, TypeError: Invalid base URL: ./a/b/catalog-info.yaml',
|
||||
);
|
||||
|
||||
expect(read).not.toBeCalled();
|
||||
@@ -339,12 +353,13 @@ describe('PlaceholderProcessor', () => {
|
||||
});
|
||||
|
||||
describe('yamlPlaceholderResolver', () => {
|
||||
const read: jest.MockedFunction<ResolverRead> = jest.fn();
|
||||
const params: ResolverParams = {
|
||||
const read: jest.MockedFunction<PlaceholderResolverRead> = jest.fn();
|
||||
const params: PlaceholderResolverParams = {
|
||||
key: 'a',
|
||||
value: './file.yaml',
|
||||
baseUrl: 'https://github.com/backstage/backstage/a/b/catalog-info.yaml',
|
||||
read,
|
||||
resolveUrl: (url, base) => integrations.resolveUrl({ url, base }),
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -383,12 +398,13 @@ describe('yamlPlaceholderResolver', () => {
|
||||
});
|
||||
|
||||
describe('jsonPlaceholderResolver', () => {
|
||||
const read: jest.MockedFunction<ResolverRead> = jest.fn();
|
||||
const params: ResolverParams = {
|
||||
const read: jest.MockedFunction<PlaceholderResolverRead> = jest.fn();
|
||||
const params: PlaceholderResolverParams = {
|
||||
key: 'a',
|
||||
value: './file.json',
|
||||
baseUrl: 'https://github.com/backstage/backstage/a/b/catalog-info.yaml',
|
||||
read,
|
||||
resolveUrl: (url, base) => integrations.resolveUrl({ url, base }),
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -17,25 +17,32 @@
|
||||
import { UrlReader } from '@backstage/backend-common';
|
||||
import { Entity, LocationSpec } from '@backstage/catalog-model';
|
||||
import { JsonValue } from '@backstage/config';
|
||||
import { ScmIntegrationRegistry } from '@backstage/integration';
|
||||
import yaml from 'yaml';
|
||||
import { CatalogProcessor } from './types';
|
||||
|
||||
export type ResolverRead = (url: string) => Promise<Buffer>;
|
||||
export type PlaceholderResolverRead = (url: string) => Promise<Buffer>;
|
||||
export type PlaceholderResolverResolveUrl = (
|
||||
url: string,
|
||||
base: string,
|
||||
) => string;
|
||||
|
||||
export type ResolverParams = {
|
||||
export type PlaceholderResolverParams = {
|
||||
key: string;
|
||||
value: JsonValue;
|
||||
baseUrl: string;
|
||||
read: ResolverRead;
|
||||
read: PlaceholderResolverRead;
|
||||
resolveUrl: PlaceholderResolverResolveUrl;
|
||||
};
|
||||
|
||||
export type PlaceholderResolver = (
|
||||
params: ResolverParams,
|
||||
params: PlaceholderResolverParams,
|
||||
) => Promise<JsonValue>;
|
||||
|
||||
type Options = {
|
||||
export type PlaceholderProcessorOptions = {
|
||||
resolvers: Record<string, PlaceholderResolver>;
|
||||
reader: UrlReader;
|
||||
integrations: ScmIntegrationRegistry;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -43,7 +50,7 @@ type Options = {
|
||||
* that it then fills in with actual data.
|
||||
*/
|
||||
export class PlaceholderProcessor implements CatalogProcessor {
|
||||
constructor(private readonly options: Options) {}
|
||||
constructor(private readonly options: PlaceholderProcessorOptions) {}
|
||||
|
||||
async preProcessEntity(
|
||||
entity: Entity,
|
||||
@@ -103,12 +110,19 @@ export class PlaceholderProcessor implements CatalogProcessor {
|
||||
return this.options.reader.read(url);
|
||||
};
|
||||
|
||||
const resolveUrl = (url: string, base: string): string =>
|
||||
this.options.integrations.resolveUrl({
|
||||
url,
|
||||
base,
|
||||
});
|
||||
|
||||
return [
|
||||
await resolver({
|
||||
key: resolverKey,
|
||||
value: resolverValue,
|
||||
baseUrl: location.target,
|
||||
read,
|
||||
resolveUrl,
|
||||
}),
|
||||
true,
|
||||
];
|
||||
@@ -124,7 +138,7 @@ export class PlaceholderProcessor implements CatalogProcessor {
|
||||
*/
|
||||
|
||||
export async function yamlPlaceholderResolver(
|
||||
params: ResolverParams,
|
||||
params: PlaceholderResolverParams,
|
||||
): Promise<JsonValue> {
|
||||
const text = await readTextLocation(params);
|
||||
|
||||
@@ -155,7 +169,7 @@ export async function yamlPlaceholderResolver(
|
||||
}
|
||||
|
||||
export async function jsonPlaceholderResolver(
|
||||
params: ResolverParams,
|
||||
params: PlaceholderResolverParams,
|
||||
): Promise<JsonValue> {
|
||||
const text = await readTextLocation(params);
|
||||
|
||||
@@ -169,7 +183,7 @@ export async function jsonPlaceholderResolver(
|
||||
}
|
||||
|
||||
export async function textPlaceholderResolver(
|
||||
params: ResolverParams,
|
||||
params: PlaceholderResolverParams,
|
||||
): Promise<JsonValue> {
|
||||
return await readTextLocation(params);
|
||||
}
|
||||
@@ -178,7 +192,9 @@ export async function textPlaceholderResolver(
|
||||
* Helpers
|
||||
*/
|
||||
|
||||
async function readTextLocation(params: ResolverParams): Promise<string> {
|
||||
async function readTextLocation(
|
||||
params: PlaceholderResolverParams,
|
||||
): Promise<string> {
|
||||
const newUrl = relativeUrl(params);
|
||||
|
||||
try {
|
||||
@@ -191,31 +207,27 @@ async function readTextLocation(params: ResolverParams): Promise<string> {
|
||||
}
|
||||
}
|
||||
|
||||
function relativeUrl({ key, value, baseUrl }: ResolverParams): string {
|
||||
function relativeUrl({
|
||||
key,
|
||||
value,
|
||||
baseUrl,
|
||||
resolveUrl,
|
||||
}: PlaceholderResolverParams): string {
|
||||
if (typeof value !== 'string') {
|
||||
throw new Error(
|
||||
`Placeholder \$${key} expected a string value parameter, in the form of an absolute URL or a relative path`,
|
||||
);
|
||||
}
|
||||
|
||||
let url: URL;
|
||||
try {
|
||||
// The two-value form of the URL constructor handles relative paths for us
|
||||
url = new URL(value, baseUrl);
|
||||
} catch {
|
||||
try {
|
||||
// Check whether value is a valid absolute URL on it's own, if not fail.
|
||||
url = new URL(value);
|
||||
} catch {
|
||||
// The only remaining case that isn't support is a relative file path that should be
|
||||
// resolved using a relative file location. Accessing local file paths can lead to
|
||||
// path traversal attacks and access to any file on the host system. Implementing this
|
||||
// would require additional security measures.
|
||||
throw new Error(
|
||||
`Placeholder \$${key} could not form a URL out of ${baseUrl} and ${value}`,
|
||||
);
|
||||
}
|
||||
return resolveUrl(value, baseUrl);
|
||||
} catch (e) {
|
||||
// The only remaining case that isn't support is a relative file path that should be
|
||||
// resolved using a relative file location. Accessing local file paths can lead to
|
||||
// path traversal attacks and access to any file on the host system. Implementing this
|
||||
// would require additional security measures.
|
||||
throw new Error(
|
||||
`Placeholder \$${key} could not form a URL out of ${baseUrl} and ${value}, ${e}`,
|
||||
);
|
||||
}
|
||||
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
@@ -26,16 +26,6 @@ import {
|
||||
CatalogProcessorParser,
|
||||
} from './types';
|
||||
|
||||
// TODO(Rugvip): Added for backwards compatibility when moving to UrlReader, this
|
||||
// can be removed in a bit
|
||||
const deprecatedTypes = [
|
||||
'github',
|
||||
'github/api',
|
||||
'bitbucket/api',
|
||||
'gitlab/api',
|
||||
'azure/api',
|
||||
];
|
||||
|
||||
type Options = {
|
||||
reader: UrlReader;
|
||||
logger: Logger;
|
||||
@@ -50,13 +40,7 @@ export class UrlReaderProcessor implements CatalogProcessor {
|
||||
emit: CatalogProcessorEmit,
|
||||
parser: CatalogProcessorParser,
|
||||
): Promise<boolean> {
|
||||
if (deprecatedTypes.includes(location.type)) {
|
||||
// TODO(Rugvip): Remove this warning a month or two into 2021, and remove support for the deprecated types.
|
||||
this.options.logger.warn(
|
||||
`Location '${location.target}' uses deprecated location type '${location.type}', use 'url' instead. ` +
|
||||
'Use "scripts/migrate-location-types.js" in the Backstage repo to migrate existing locations.',
|
||||
);
|
||||
} else if (location.type !== 'url') {
|
||||
if (location.type !== 'url') {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import * as results from './results';
|
||||
export { AnnotateLocationEntityProcessor } from './AnnotateLocationEntityProcessor';
|
||||
export { AnnotateScmSlugEntityProcessor } from './AnnotateScmSlugEntityProcessor';
|
||||
export { AwsOrganizationCloudAccountProcessor } from './AwsOrganizationCloudAccountProcessor';
|
||||
export type { AwsOrganizationProviderConfig } from './awsOrganization/config';
|
||||
export { BitbucketDiscoveryProcessor } from './BitbucketDiscoveryProcessor';
|
||||
export { BuiltinKindsEntityProcessor } from './BuiltinKindsEntityProcessor';
|
||||
export { CodeOwnersProcessor } from './CodeOwnersProcessor';
|
||||
@@ -28,8 +29,15 @@ export { GithubOrgReaderProcessor } from './GithubOrgReaderProcessor';
|
||||
export { GithubMultiOrgReaderProcessor } from './GithubMultiOrgReaderProcessor';
|
||||
export { GitLabDiscoveryProcessor } from './GitLabDiscoveryProcessor';
|
||||
export { LocationEntityProcessor } from './LocationEntityProcessor';
|
||||
export type { LocationEntityProcessorOptions } from './LocationEntityProcessor';
|
||||
export { PlaceholderProcessor } from './PlaceholderProcessor';
|
||||
export type { PlaceholderResolver } from './PlaceholderProcessor';
|
||||
export type {
|
||||
PlaceholderProcessorOptions,
|
||||
PlaceholderResolver,
|
||||
PlaceholderResolverParams,
|
||||
PlaceholderResolverRead,
|
||||
PlaceholderResolverResolveUrl,
|
||||
} from './PlaceholderProcessor';
|
||||
export { StaticLocationProcessor } from './StaticLocationProcessor';
|
||||
export * from './types';
|
||||
export { UrlReaderProcessor } from './UrlReaderProcessor';
|
||||
|
||||
@@ -99,7 +99,7 @@ export type AnalyzeLocationResponse = {
|
||||
// read and emitted like this so that the frontend can inform the user that it
|
||||
// located them and can make sure to register them as well if they weren't
|
||||
// already
|
||||
type AnalyzeLocationExistingEntity = {
|
||||
export type AnalyzeLocationExistingEntity = {
|
||||
location: LocationSpec;
|
||||
isRegistered: boolean;
|
||||
entity: Entity;
|
||||
@@ -110,7 +110,7 @@ type AnalyzeLocationExistingEntity = {
|
||||
// the frontend. It'll probably contain a (possibly incomplete) entity, plus
|
||||
// enough info for the frontend to know what form data to show to the user
|
||||
// for overriding/completing the info.
|
||||
type AnalyzeLocationGenerateEntity = {
|
||||
export type AnalyzeLocationGenerateEntity = {
|
||||
// Some form of partial representation of the entity
|
||||
entity: RecursivePartial<Entity>;
|
||||
// Lists the suggestions that the user may want to override
|
||||
@@ -120,7 +120,7 @@ type AnalyzeLocationGenerateEntity = {
|
||||
// This is where I get really vague. Something like this perhaps? Or it could be
|
||||
// something like a json-schema that contains enough info for the frontend to
|
||||
// be able to present a form and explanations
|
||||
type AnalyzeLocationEntityField = {
|
||||
export type AnalyzeLocationEntityField = {
|
||||
// e.g. "spec.owner"? The frontend needs to know how to "inject" the field into the
|
||||
// entity again if the user wants to change it
|
||||
field: string;
|
||||
|
||||
@@ -14,11 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
PluginDatabaseManager,
|
||||
resolvePackagePath,
|
||||
UrlReader,
|
||||
} from '@backstage/backend-common';
|
||||
import { resolvePackagePath } from '@backstage/backend-common';
|
||||
import {
|
||||
DefaultNamespaceEntityPolicy,
|
||||
EntityPolicies,
|
||||
@@ -29,11 +25,9 @@ import {
|
||||
SchemaValidEntityPolicy,
|
||||
Validators,
|
||||
} from '@backstage/catalog-model';
|
||||
import { Config } from '@backstage/config';
|
||||
import { ScmIntegrations } from '@backstage/integration';
|
||||
import { createHash } from 'crypto';
|
||||
import lodash from 'lodash';
|
||||
import { Logger } from 'winston';
|
||||
import {
|
||||
DatabaseLocationsCatalog,
|
||||
EntitiesCatalog,
|
||||
@@ -80,13 +74,7 @@ import {
|
||||
createRandomRefreshInterval,
|
||||
RefreshIntervalFunction,
|
||||
} from './refresh';
|
||||
|
||||
export type CatalogEnvironment = {
|
||||
logger: Logger;
|
||||
database: PluginDatabaseManager;
|
||||
config: Config;
|
||||
reader: UrlReader;
|
||||
};
|
||||
import { CatalogEnvironment } from '../service/CatalogBuilder';
|
||||
|
||||
/**
|
||||
* A builder that helps wire up all of the component parts of the catalog.
|
||||
@@ -385,7 +373,11 @@ export class NextCatalogBuilder {
|
||||
|
||||
// These are always there no matter what
|
||||
const processors: CatalogProcessor[] = [
|
||||
new PlaceholderProcessor({ resolvers: placeholderResolvers, reader }),
|
||||
new PlaceholderProcessor({
|
||||
resolvers: placeholderResolvers,
|
||||
reader,
|
||||
integrations,
|
||||
}),
|
||||
new BuiltinKindsEntityProcessor(),
|
||||
];
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ import {
|
||||
import { disallowReadonlyMode, validateRequestBody } from '../service/util';
|
||||
import { LocationService } from './types';
|
||||
|
||||
export interface RouterOptions {
|
||||
export interface NextRouterOptions {
|
||||
entitiesCatalog?: EntitiesCatalog;
|
||||
locationAnalyzer?: LocationAnalyzer;
|
||||
locationService: LocationService;
|
||||
@@ -45,7 +45,7 @@ export interface RouterOptions {
|
||||
}
|
||||
|
||||
export async function createNextRouter(
|
||||
options: RouterOptions,
|
||||
options: NextRouterOptions,
|
||||
): Promise<express.Router> {
|
||||
const { entitiesCatalog, locationAnalyzer, locationService, config, logger } =
|
||||
options;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
export { NextCatalogBuilder } from './NextCatalogBuilder';
|
||||
export { createNextRouter } from './NextRouter';
|
||||
export type { NextRouterOptions } from './NextRouter';
|
||||
export * from './processing';
|
||||
export { createRandomRefreshInterval } from './refresh';
|
||||
export type { RefreshIntervalFunction } from './refresh';
|
||||
@@ -24,4 +25,7 @@ export type {
|
||||
EntityProvider,
|
||||
EntityProviderConnection,
|
||||
EntityProviderMutation,
|
||||
CatalogProcessingEngine,
|
||||
LocationService,
|
||||
LocationStore,
|
||||
} from './types';
|
||||
|
||||
@@ -18,5 +18,6 @@ export type {
|
||||
CatalogProcessingOrchestrator,
|
||||
EntityProcessingRequest,
|
||||
EntityProcessingResult,
|
||||
DeferredEntity,
|
||||
} from './types';
|
||||
export { DefaultCatalogProcessingOrchestrator } from './DefaultCatalogProcessingOrchestrator';
|
||||
|
||||
@@ -15,3 +15,4 @@
|
||||
*/
|
||||
|
||||
export { DefaultCatalogCollator } from './DefaultCatalogCollator';
|
||||
export type { CatalogEntityDocument } from './DefaultCatalogCollator';
|
||||
|
||||
@@ -166,7 +166,7 @@ describe('CatalogBuilder', () => {
|
||||
|
||||
const { entitiesCatalog, higherOrderOperation } = await builder.build();
|
||||
await higherOrderOperation.addLocation({
|
||||
type: 'github',
|
||||
type: 'url',
|
||||
target: 'https://github.com/a/b/x.yaml',
|
||||
});
|
||||
const { entities } = await entitiesCatalog.entities();
|
||||
|
||||
@@ -306,7 +306,11 @@ export class CatalogBuilder {
|
||||
// These are always there no matter what
|
||||
const processors: CatalogProcessor[] = [
|
||||
StaticLocationProcessor.fromConfig(config),
|
||||
new PlaceholderProcessor({ resolvers: placeholderResolvers, reader }),
|
||||
new PlaceholderProcessor({
|
||||
resolvers: placeholderResolvers,
|
||||
reader,
|
||||
integrations,
|
||||
}),
|
||||
new BuiltinKindsEntityProcessor(),
|
||||
];
|
||||
|
||||
|
||||
@@ -15,5 +15,6 @@
|
||||
*/
|
||||
|
||||
export { CatalogBuilder } from './CatalogBuilder';
|
||||
export type { CatalogEnvironment } from './CatalogBuilder';
|
||||
export { createRouter } from './router';
|
||||
export type { RouterOptions } from './router';
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-client": "^0.3.18",
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/integration": "^0.6.3",
|
||||
"@backstage/integration-react": "^0.1.8",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
@@ -43,7 +43,7 @@
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
"@octokit/rest": "^18.5.3",
|
||||
"@types/react": "*",
|
||||
"git-url-parse": "~11.4.4",
|
||||
"git-url-parse": "^11.6.0",
|
||||
"js-base64": "^3.6.0",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
@@ -54,9 +54,9 @@
|
||||
"yaml": "^1.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ type Props<TFieldValue extends string> = {
|
||||
options: string[];
|
||||
required?: boolean;
|
||||
|
||||
errors?: FieldErrors<Record<TFieldValue, string>>;
|
||||
errors?: FieldErrors;
|
||||
rules?: React.ComponentProps<typeof Controller>['rules'];
|
||||
|
||||
loading?: boolean;
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-client": "^0.3.18",
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.6.3",
|
||||
"@backstage/integration-react": "^0.1.8",
|
||||
@@ -44,7 +44,7 @@
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
"@types/react": "*",
|
||||
"classnames": "^2.2.6",
|
||||
"git-url-parse": "~11.4.4",
|
||||
"git-url-parse": "^11.6.0",
|
||||
"lodash": "^4.17.21",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
@@ -54,9 +54,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -50,9 +50,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -48,9 +48,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
@@ -40,9 +40,9 @@
|
||||
"recharts": "^1.8.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -35,9 +35,9 @@
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -54,9 +54,9 @@
|
||||
"yup": "^0.29.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -3,11 +3,10 @@
|
||||
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
|
||||
|
||||
```ts
|
||||
|
||||
/// <reference types="react" />
|
||||
|
||||
import { BackstagePlugin } from '@backstage/core-plugin-api';
|
||||
import { default } from 'react';
|
||||
import { default as default_2 } from 'react';
|
||||
import { ExternalRouteRef } from '@backstage/core-plugin-api';
|
||||
import { RouteRef } from '@backstage/core-plugin-api';
|
||||
import { TabProps } from '@material-ui/core';
|
||||
@@ -15,25 +14,30 @@ import { TabProps } from '@material-ui/core';
|
||||
// Warning: (ae-missing-release-tag) "catalogEntityRouteRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export const catalogEntityRouteRef: ExternalRouteRef< {
|
||||
name: string;
|
||||
kind: string;
|
||||
namespace: string;
|
||||
}, false>;
|
||||
export const catalogEntityRouteRef: ExternalRouteRef<
|
||||
{
|
||||
name: string;
|
||||
kind: string;
|
||||
namespace: string;
|
||||
},
|
||||
false
|
||||
>;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DomainExplorerContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export const DomainExplorerContent: ({ title, }: {
|
||||
title?: string | undefined;
|
||||
export const DomainExplorerContent: ({
|
||||
title,
|
||||
}: {
|
||||
title?: string | undefined;
|
||||
}) => JSX.Element;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "ExploreLayout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public
|
||||
export const ExploreLayout: {
|
||||
({ title, subtitle, children, }: ExploreLayoutProps): JSX.Element;
|
||||
Route: (props: SubRoute) => null;
|
||||
({ title, subtitle, children }: ExploreLayoutProps): JSX.Element;
|
||||
Route: (props: SubRoute) => null;
|
||||
};
|
||||
|
||||
// Warning: (ae-missing-release-tag) "ExplorePage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
@@ -44,17 +48,23 @@ export const ExplorePage: () => JSX.Element;
|
||||
// Warning: (ae-missing-release-tag) "explorePlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
const explorePlugin: BackstagePlugin< {
|
||||
explore: RouteRef<undefined>;
|
||||
}, {
|
||||
catalogEntity: ExternalRouteRef< {
|
||||
name: string;
|
||||
kind: string;
|
||||
namespace: string;
|
||||
}, false>;
|
||||
}>;
|
||||
export { explorePlugin }
|
||||
export { explorePlugin as plugin }
|
||||
const explorePlugin: BackstagePlugin<
|
||||
{
|
||||
explore: RouteRef<undefined>;
|
||||
},
|
||||
{
|
||||
catalogEntity: ExternalRouteRef<
|
||||
{
|
||||
name: string;
|
||||
kind: string;
|
||||
namespace: string;
|
||||
},
|
||||
false
|
||||
>;
|
||||
}
|
||||
>;
|
||||
export { explorePlugin };
|
||||
export { explorePlugin as plugin };
|
||||
|
||||
// Warning: (ae-missing-release-tag) "exploreRouteRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
@@ -64,15 +74,19 @@ export const exploreRouteRef: RouteRef<undefined>;
|
||||
// Warning: (ae-missing-release-tag) "GroupsExplorerContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export const GroupsExplorerContent: ({ title, }: {
|
||||
title?: string | undefined;
|
||||
export const GroupsExplorerContent: ({
|
||||
title,
|
||||
}: {
|
||||
title?: string | undefined;
|
||||
}) => JSX.Element;
|
||||
|
||||
// Warning: (ae-missing-release-tag) "ToolExplorerContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export const ToolExplorerContent: ({ title }: {
|
||||
title?: string | undefined;
|
||||
export const ToolExplorerContent: ({
|
||||
title,
|
||||
}: {
|
||||
title?: string | undefined;
|
||||
}) => JSX.Element;
|
||||
|
||||
// Warnings were encountered during analysis:
|
||||
@@ -81,5 +95,4 @@ export const ToolExplorerContent: ({ title }: {
|
||||
// src/components/ExploreLayout/ExploreLayout.d.ts:30:5 - (ae-forgotten-export) The symbol "SubRoute" needs to be exported by the entry point index.d.ts
|
||||
|
||||
// (No @packageDocumentation comment for this package)
|
||||
|
||||
```
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/plugin-explore-react": "^0.0.6",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
@@ -48,9 +48,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -15,49 +15,59 @@
|
||||
*/
|
||||
|
||||
import {
|
||||
GroupEntity,
|
||||
parseEntityRef,
|
||||
RELATION_CHILD_OF,
|
||||
stringifyEntityRef,
|
||||
parseEntityRef,
|
||||
GroupEntity,
|
||||
} from '@backstage/catalog-model';
|
||||
import {
|
||||
catalogApiRef,
|
||||
entityRouteRef,
|
||||
getEntityRelations,
|
||||
formatEntityRefTitle,
|
||||
} from '@backstage/plugin-catalog-react';
|
||||
import { makeStyles, Typography } from '@material-ui/core';
|
||||
import ZoomOutMap from '@material-ui/icons/ZoomOutMap';
|
||||
import React from 'react';
|
||||
import { useAsync } from 'react-use';
|
||||
import { BackstageTheme } from '@backstage/theme';
|
||||
|
||||
import {
|
||||
DependencyGraph,
|
||||
DependencyGraphTypes,
|
||||
Link,
|
||||
Progress,
|
||||
ResponseErrorPanel,
|
||||
Link,
|
||||
} from '@backstage/core-components';
|
||||
import { useApi, useRouteRef, configApiRef } from '@backstage/core-plugin-api';
|
||||
import { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';
|
||||
import {
|
||||
catalogApiRef,
|
||||
entityRouteRef,
|
||||
formatEntityRefTitle,
|
||||
getEntityRelations,
|
||||
} from '@backstage/plugin-catalog-react';
|
||||
import { BackstageTheme } from '@backstage/theme';
|
||||
import { makeStyles, Typography, useTheme } from '@material-ui/core';
|
||||
import ZoomOutMap from '@material-ui/icons/ZoomOutMap';
|
||||
import classNames from 'classnames';
|
||||
import React from 'react';
|
||||
import { useAsync } from 'react-use';
|
||||
|
||||
const useStyles = makeStyles((theme: BackstageTheme) => ({
|
||||
graph: {
|
||||
flex: 1,
|
||||
minHeight: 0,
|
||||
},
|
||||
organizationNode: {
|
||||
fill: 'coral',
|
||||
stroke: theme.palette.border,
|
||||
fill: theme.palette.secondary.light,
|
||||
stroke: theme.palette.secondary.light,
|
||||
},
|
||||
groupNode: {
|
||||
fill: 'yellowgreen',
|
||||
stroke: theme.palette.border,
|
||||
fill: theme.palette.primary.light,
|
||||
stroke: theme.palette.primary.light,
|
||||
},
|
||||
centeredContent: {
|
||||
padding: '10px',
|
||||
padding: theme.spacing(1),
|
||||
height: '100%',
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
color: 'black',
|
||||
},
|
||||
textOrganization: {
|
||||
color: theme.palette.secondary.contrastText,
|
||||
},
|
||||
textGroup: {
|
||||
color: theme.palette.primary.contrastText,
|
||||
},
|
||||
textWrapper: {
|
||||
display: '-webkit-box',
|
||||
WebkitBoxOrient: 'vertical',
|
||||
@@ -70,14 +80,10 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({
|
||||
},
|
||||
}));
|
||||
|
||||
const dimensions = {
|
||||
nodeWidth: 180,
|
||||
nodeHeight: 90,
|
||||
nodeCornerRadius: 20,
|
||||
nodeAligmentShift: 5,
|
||||
};
|
||||
|
||||
function RenderNode(props: DependencyGraphTypes.RenderNodeProps<any>) {
|
||||
const nodeWidth = 180;
|
||||
const nodeHeight = 60;
|
||||
const theme = useTheme();
|
||||
const classes = useStyles();
|
||||
const catalogEntityRoute = useRouteRef(entityRouteRef);
|
||||
|
||||
@@ -85,18 +91,22 @@ function RenderNode(props: DependencyGraphTypes.RenderNodeProps<any>) {
|
||||
return (
|
||||
<g>
|
||||
<rect
|
||||
width={dimensions.nodeWidth}
|
||||
height={dimensions.nodeHeight}
|
||||
rx={dimensions.nodeCornerRadius}
|
||||
width={nodeWidth}
|
||||
height={nodeHeight}
|
||||
rx={theme.shape.borderRadius}
|
||||
className={classes.organizationNode}
|
||||
/>
|
||||
<title>{props.node.name}</title>
|
||||
<foreignObject
|
||||
width={dimensions.nodeWidth}
|
||||
height={dimensions.nodeHeight}
|
||||
>
|
||||
<foreignObject width={nodeWidth} height={nodeHeight}>
|
||||
<div className={classes.centeredContent}>
|
||||
<div className={classes.textWrapper}>{props.node.name}</div>
|
||||
<div
|
||||
className={classNames(
|
||||
classes.textWrapper,
|
||||
classes.textOrganization,
|
||||
)}
|
||||
>
|
||||
{props.node.name}
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
</g>
|
||||
@@ -108,9 +118,9 @@ function RenderNode(props: DependencyGraphTypes.RenderNodeProps<any>) {
|
||||
return (
|
||||
<g>
|
||||
<rect
|
||||
width={dimensions.nodeWidth}
|
||||
height={dimensions.nodeHeight}
|
||||
rx={dimensions.nodeCornerRadius}
|
||||
width={nodeWidth}
|
||||
height={nodeHeight}
|
||||
rx={theme.shape.borderRadius}
|
||||
className={classes.groupNode}
|
||||
/>
|
||||
<title>{props.node.name}</title>
|
||||
@@ -122,12 +132,11 @@ function RenderNode(props: DependencyGraphTypes.RenderNodeProps<any>) {
|
||||
name: ref.name,
|
||||
})}
|
||||
>
|
||||
<foreignObject
|
||||
width={dimensions.nodeWidth}
|
||||
height={dimensions.nodeHeight}
|
||||
>
|
||||
<foreignObject width={nodeWidth} height={nodeHeight}>
|
||||
<div className={classes.centeredContent}>
|
||||
<div className={classes.textWrapper}>{props.node.name}</div>
|
||||
<div className={classNames(classes.textWrapper, classes.textGroup)}>
|
||||
{props.node.name}
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
</Link>
|
||||
@@ -146,6 +155,7 @@ export function GroupsDiagram() {
|
||||
}>();
|
||||
const edges = new Array<{ from: string; to: string; label: string }>();
|
||||
|
||||
const classes = useStyles();
|
||||
const configApi = useApi(configApiRef);
|
||||
const catalogApi = useApi(catalogApiRef);
|
||||
const organizationName =
|
||||
@@ -218,6 +228,7 @@ export function GroupsDiagram() {
|
||||
nodeMargin={10}
|
||||
direction={DependencyGraphTypes.Direction.RIGHT_LEFT}
|
||||
renderNode={RenderNode}
|
||||
className={classes.graph}
|
||||
/>
|
||||
<Typography
|
||||
variant="caption"
|
||||
|
||||
@@ -21,6 +21,15 @@ import {
|
||||
ContentHeader,
|
||||
SupportButton,
|
||||
} from '@backstage/core-components';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
|
||||
const useStyles = makeStyles({
|
||||
root: {
|
||||
height: '100%',
|
||||
maxHeight: '100%',
|
||||
minHeight: 0,
|
||||
},
|
||||
});
|
||||
|
||||
type GroupsExplorerContentProps = {
|
||||
title?: string;
|
||||
@@ -29,8 +38,10 @@ type GroupsExplorerContentProps = {
|
||||
export const GroupsExplorerContent = ({
|
||||
title,
|
||||
}: GroupsExplorerContentProps) => {
|
||||
const classes = useStyles();
|
||||
|
||||
return (
|
||||
<Content noPadding>
|
||||
<Content noPadding stretch className={classes.root}>
|
||||
<ContentHeader title={title ?? 'Groups'}>
|
||||
<SupportButton>Explore your groups.</SupportButton>
|
||||
</ContentHeader>
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -34,9 +34,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
@@ -48,9 +48,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -42,9 +42,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/integration": "^0.6.3",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -38,9 +38,9 @@
|
||||
"recharts": "^1.8.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/integration": "^0.6.3",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
@@ -51,9 +51,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.6.3",
|
||||
"@backstage/integration-react": "^0.1.8",
|
||||
@@ -38,9 +38,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -43,9 +43,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -44,9 +44,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-home
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 7f00902d9: Rename RandomJokeHomePageComponent to HomePageRandomJoke to fit convention, and update example app accordingly.
|
||||
**NOTE**: If you're using the RandomJoke component in your instance, it now has to be renamed to `HomePageRandomJoke`
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.4.1
|
||||
- @backstage/core-plugin-api@0.1.7
|
||||
|
||||
## 0.2.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-home",
|
||||
"version": "0.2.1",
|
||||
"version": "0.3.0",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -20,22 +20,22 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
"@types/react": "^16.9",
|
||||
"@types/react": "*",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-router": "^6.0.0-beta.0",
|
||||
"react-router": "6.0.0-beta.0",
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
import React, { ReactNode } from 'react';
|
||||
import { useOutlet } from 'react-router';
|
||||
import { Content, Header, Page } from '@backstage/core-components';
|
||||
|
||||
export const HomepageCompositionRoot = (props: {
|
||||
title?: string;
|
||||
@@ -24,10 +23,5 @@ export const HomepageCompositionRoot = (props: {
|
||||
}) => {
|
||||
const outlet = useOutlet();
|
||||
const children = props.children ?? outlet;
|
||||
return (
|
||||
<Page themeId="home">
|
||||
<Header title={props.title ?? 'Home'} />
|
||||
<Content>{children}</Content>
|
||||
</Page>
|
||||
);
|
||||
return <>{children}</>;
|
||||
};
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
@@ -38,9 +38,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -47,9 +47,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -34,9 +34,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/plugin-kubernetes-common": "^0.1.3",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
@@ -50,9 +50,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/config": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -47,9 +47,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -42,9 +42,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -54,7 +54,7 @@ export const NewRelicAPMTable = ({ applications }: NewRelicApplications) => {
|
||||
return (
|
||||
<Table
|
||||
title="Application Performance Monitoring"
|
||||
options={{ search: false, paging: false }}
|
||||
options={{ search: true, paging: true }}
|
||||
columns={columns}
|
||||
data={data}
|
||||
/>
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/plugin-org
|
||||
|
||||
## 0.3.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6ad8fe1a0: Make ownership card style customizable via custom `theme.getPageTheme()`.
|
||||
- 70718686f: Use correct `Link` in ownership card to avoid a full reload of the app while navigating.
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.4.1
|
||||
- @backstage/catalog-model@0.9.2
|
||||
- @backstage/core-plugin-api@0.1.7
|
||||
|
||||
## 0.3.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-org",
|
||||
"version": "0.3.21",
|
||||
"version": "0.3.22",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -20,9 +20,9 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/catalog-model": "^0.9.2",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -36,9 +36,9 @@
|
||||
"qs": "^6.10.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -18,6 +18,7 @@ import { Entity } from '@backstage/catalog-model';
|
||||
import {
|
||||
InfoCard,
|
||||
InfoCardVariants,
|
||||
Link,
|
||||
Progress,
|
||||
ResponseErrorPanel,
|
||||
} from '@backstage/core-components';
|
||||
@@ -29,18 +30,16 @@ import {
|
||||
isOwnerOf,
|
||||
useEntity,
|
||||
} from '@backstage/plugin-catalog-react';
|
||||
import { BackstageTheme, genPageTheme } from '@backstage/theme';
|
||||
import { BackstageTheme } from '@backstage/theme';
|
||||
import {
|
||||
Box,
|
||||
createStyles,
|
||||
Grid,
|
||||
Link,
|
||||
makeStyles,
|
||||
Typography,
|
||||
} from '@material-ui/core';
|
||||
import qs from 'qs';
|
||||
import React from 'react';
|
||||
import { generatePath } from 'react-router';
|
||||
import { useAsync } from 'react-use';
|
||||
|
||||
type EntityTypeProps = {
|
||||
@@ -49,16 +48,6 @@ type EntityTypeProps = {
|
||||
count: number;
|
||||
};
|
||||
|
||||
const createPageTheme = (
|
||||
theme: BackstageTheme,
|
||||
shapeKey: string,
|
||||
colorsKey: string,
|
||||
) => {
|
||||
const { colors } = theme.getPageTheme({ themeId: colorsKey });
|
||||
const { shape } = theme.getPageTheme({ themeId: shapeKey });
|
||||
return genPageTheme(colors, shape).backgroundImage;
|
||||
};
|
||||
|
||||
const useStyles = makeStyles((theme: BackstageTheme) =>
|
||||
createStyles({
|
||||
card: {
|
||||
@@ -77,7 +66,7 @@ const useStyles = makeStyles((theme: BackstageTheme) =>
|
||||
},
|
||||
entityTypeBox: {
|
||||
background: (props: { type: string }) =>
|
||||
createPageTheme(theme, props.type, props.type),
|
||||
theme.getPageTheme({ themeId: props.type }).backgroundImage,
|
||||
},
|
||||
}),
|
||||
);
|
||||
@@ -96,7 +85,7 @@ const EntityCountTile = ({
|
||||
const classes = useStyles({ type });
|
||||
|
||||
return (
|
||||
<Link href={url} variant="body2">
|
||||
<Link to={url} variant="body2">
|
||||
<Box
|
||||
className={`${classes.card} ${classes.entityTypeBox}`}
|
||||
display="flex"
|
||||
@@ -218,7 +207,7 @@ export const OwnershipCard = ({
|
||||
counter={c.counter}
|
||||
type={c.type}
|
||||
name={c.name}
|
||||
url={generatePath(`${catalogLink()}/?${c.queryParams}`)}
|
||||
url={`${catalogLink()}/?${c.queryParams}`}
|
||||
/>
|
||||
</Grid>
|
||||
))}
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -47,9 +47,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/core-components": "^0.4.0",
|
||||
"@backstage/core-plugin-api": "^0.1.6",
|
||||
"@backstage/core-components": "^0.4.1",
|
||||
"@backstage/core-plugin-api": "^0.1.7",
|
||||
"@backstage/plugin-catalog-react": "^0.4.5",
|
||||
"@backstage/theme": "^0.2.10",
|
||||
"@material-ui/core": "^4.12.2",
|
||||
@@ -48,9 +48,9 @@
|
||||
"react-use": "^17.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/core-app-api": "^0.1.11",
|
||||
"@backstage/dev-utils": "^0.2.8",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/core-app-api": "^0.1.12",
|
||||
"@backstage/dev-utils": "^0.2.9",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-scaffolder-backend
|
||||
|
||||
## 0.15.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 04aad2dab: Fix issue #7021 scaffolder action fetch:template preserves templates file permissions
|
||||
- 21ccd4997: GitHub Webhook action in Scaffolder Backend has been improved to validate event names against Octokit Webhook event names list.
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-client@0.3.19
|
||||
- @backstage/catalog-model@0.9.2
|
||||
- @backstage/errors@0.1.2
|
||||
- @backstage/config@0.1.9
|
||||
- @backstage/backend-common@0.9.2
|
||||
|
||||
## 0.15.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-scaffolder-backend",
|
||||
"version": "0.15.3",
|
||||
"version": "0.15.4",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,11 +29,11 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.9.1",
|
||||
"@backstage/catalog-client": "^0.3.17",
|
||||
"@backstage/catalog-model": "^0.9.1",
|
||||
"@backstage/config": "^0.1.8",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/backend-common": "^0.9.2",
|
||||
"@backstage/catalog-client": "^0.3.19",
|
||||
"@backstage/catalog-model": "^0.9.2",
|
||||
"@backstage/config": "^0.1.9",
|
||||
"@backstage/errors": "^0.1.2",
|
||||
"@backstage/integration": "^0.6.3",
|
||||
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "^0.1.2",
|
||||
"@gitbeaker/core": "^30.2.0",
|
||||
@@ -49,7 +49,7 @@
|
||||
"express": "^4.17.1",
|
||||
"express-promise-router": "^4.1.0",
|
||||
"fs-extra": "10.0.0",
|
||||
"git-url-parse": "~11.4.4",
|
||||
"git-url-parse": "^11.6.0",
|
||||
"globby": "^11.0.0",
|
||||
"handlebars": "^4.7.6",
|
||||
"helmet": "^4.0.0",
|
||||
@@ -67,7 +67,7 @@
|
||||
"yaml": "^1.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.7.10",
|
||||
"@backstage/cli": "^0.7.11",
|
||||
"@backstage/test-utils": "^0.1.17",
|
||||
"@types/command-exists": "^1.2.0",
|
||||
"@types/fs-extra": "^9.0.1",
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
@@ -1,46 +0,0 @@
|
||||
# Getting Started with Create React App
|
||||
|
||||
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
|
||||
|
||||
## Available Scripts
|
||||
|
||||
In the project directory, you can run:
|
||||
|
||||
### `yarn start`
|
||||
|
||||
Runs the app in the development mode.\
|
||||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
|
||||
|
||||
The page will reload if you make edits.\
|
||||
You will also see any lint errors in the console.
|
||||
|
||||
### `yarn test`
|
||||
|
||||
Launches the test runner in the interactive watch mode.\
|
||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||
|
||||
### `yarn build`
|
||||
|
||||
Builds the app for production to the `build` folder.\
|
||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes.\
|
||||
Your app is ready to be deployed!
|
||||
|
||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||
|
||||
### `yarn eject`
|
||||
|
||||
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
|
||||
|
||||
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||
|
||||
Instead, it will copy all the configuration files and the transitive dependencies (`webpack`, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
|
||||
|
||||
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
|
||||
|
||||
## Learn More
|
||||
|
||||
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||
|
||||
To learn React, check out the [React documentation](https://reactjs.org/).
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
apiVersion: backstage.io/v1alpha1
|
||||
kind: Component
|
||||
metadata:
|
||||
name: {{cookiecutter.component_id | jsonify}}
|
||||
description: {{cookiecutter.description | jsonify}}
|
||||
annotations:
|
||||
github.com/project-slug: {{cookiecutter.destination.owner + "/" + cookiecutter.destination.repo}}
|
||||
backstage.io/techdocs-ref: dir:.
|
||||
spec:
|
||||
type: website
|
||||
lifecycle: experimental
|
||||
owner: {{cookiecutter.owner | jsonify}}
|
||||
@@ -1,8 +0,0 @@
|
||||
site_name: {{cookiecutter.component_id | jsonify}}
|
||||
site_description: {{cookiecutter.description | jsonify}}
|
||||
|
||||
nav:
|
||||
- Introduction: index.md
|
||||
|
||||
plugins:
|
||||
- techdocs-core
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"name": "{{cookiecutter.component_id}}",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@testing-library/jest-dom": "^5.11.4",
|
||||
"@testing-library/react": "^11.1.0",
|
||||
"@testing-library/user-event": "^12.1.10",
|
||||
"@types/jest": "^26.0.15",
|
||||
"@types/node": "^12.0.0",
|
||||
"@types/react": "^17.0.0",
|
||||
"@types/react-dom": "^17.0.0",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-scripts": "4.0.3",
|
||||
"typescript": "^4.1.2",
|
||||
"web-vitals": "^1.0.1"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 3.8 KiB |
-43
@@ -1,43 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Web site created using create-react-app"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>React App</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 5.2 KiB |
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 9.4 KiB |
-25
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
||||
@@ -1,38 +0,0 @@
|
||||
.App {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.App-logo {
|
||||
height: 40vmin;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
.App-logo {
|
||||
animation: App-logo-spin infinite 20s linear;
|
||||
}
|
||||
}
|
||||
|
||||
.App-header {
|
||||
background-color: #282c34;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: calc(10px + 2vmin);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.App-link {
|
||||
color: #61dafb;
|
||||
}
|
||||
|
||||
@keyframes App-logo-spin {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import React from 'react';
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import App from './App';
|
||||
|
||||
test('renders learn react link', () => {
|
||||
render(<App />);
|
||||
const linkElement = screen.getByText(/learn react/i);
|
||||
expect(linkElement).toBeInTheDocument();
|
||||
});
|
||||
@@ -1,26 +0,0 @@
|
||||
import React from 'react';
|
||||
import logo from './logo.svg';
|
||||
import './App.css';
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="App">
|
||||
<header className="App-header">
|
||||
<img src={logo} className="App-logo" alt="logo" />
|
||||
<p>
|
||||
Edit <code>src/App.tsx</code> and save to reload.
|
||||
</p>
|
||||
<a
|
||||
className="App-link"
|
||||
href="https://reactjs.org"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn React
|
||||
</a>
|
||||
</header>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
@@ -1,13 +0,0 @@
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
||||
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
||||
sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
||||
monospace;
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import './index.css';
|
||||
import App from './App';
|
||||
import reportWebVitals from './reportWebVitals';
|
||||
|
||||
ReactDOM.render(
|
||||
<React.StrictMode>
|
||||
<App />
|
||||
</React.StrictMode>,
|
||||
document.getElementById('root')
|
||||
);
|
||||
|
||||
// If you want to start measuring performance in your app, pass a function
|
||||
// to log results (for example: reportWebVitals(console.log))
|
||||
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
||||
reportWebVitals();
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
Vendored
-1
@@ -1 +0,0 @@
|
||||
/// <reference types="react-scripts" />
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
import { ReportHandler } from 'web-vitals';
|
||||
|
||||
const reportWebVitals = (onPerfEntry?: ReportHandler) => {
|
||||
if (onPerfEntry && onPerfEntry instanceof Function) {
|
||||
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
|
||||
getCLS(onPerfEntry);
|
||||
getFID(onPerfEntry);
|
||||
getFCP(onPerfEntry);
|
||||
getLCP(onPerfEntry);
|
||||
getTTFB(onPerfEntry);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export default reportWebVitals;
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
// jest-dom adds custom jest matchers for asserting on DOM nodes.
|
||||
// allows you to do things like:
|
||||
// expect(element).toHaveTextContent(/react/i)
|
||||
// learn more: https://github.com/testing-library/jest-dom
|
||||
import '@testing-library/jest-dom';
|
||||
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"lib": [
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"esnext"
|
||||
],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"strict": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
"jsx": "react-jsx"
|
||||
},
|
||||
"include": [
|
||||
"src"
|
||||
]
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
apiVersion: backstage.io/v1beta2
|
||||
kind: Template
|
||||
metadata:
|
||||
name: create-react-app-template
|
||||
title: Create React App Template
|
||||
description: Create a new CRA website project
|
||||
tags:
|
||||
- react
|
||||
- cra
|
||||
spec:
|
||||
owner: web@example.com
|
||||
type: website
|
||||
parameters:
|
||||
- title: Provide some simple information
|
||||
required:
|
||||
- component_id
|
||||
- owner
|
||||
properties:
|
||||
component_id:
|
||||
title: Name
|
||||
type: string
|
||||
description: Unique name of the component
|
||||
description:
|
||||
title: Description
|
||||
type: string
|
||||
description: Help others understand what this website is for.
|
||||
owner:
|
||||
title: Owner
|
||||
type: string
|
||||
description: Owner of the component
|
||||
ui:field: OwnerPicker
|
||||
ui:options:
|
||||
allowedKinds:
|
||||
- Group
|
||||
- title: Choose a location
|
||||
required:
|
||||
- repoUrl
|
||||
properties:
|
||||
repoUrl:
|
||||
title: Repository Location
|
||||
type: string
|
||||
ui:field: RepoUrlPicker
|
||||
ui:options:
|
||||
allowedHosts:
|
||||
- github.com
|
||||
steps:
|
||||
- id: template
|
||||
name: Fetch Skeleton + Template
|
||||
action: fetch:cookiecutter
|
||||
input:
|
||||
url: ./skeleton
|
||||
copyWithoutRender:
|
||||
- .github/workflows/*
|
||||
values:
|
||||
component_id: '{{ parameters.component_id }}'
|
||||
description: '{{ parameters.description }}'
|
||||
destination: '{{ parseRepoUrl parameters.repoUrl }}'
|
||||
owner: '{{ parameters.owner }}'
|
||||
|
||||
- id: publish
|
||||
name: Publish
|
||||
action: publish:github
|
||||
input:
|
||||
allowedHosts: ['github.com']
|
||||
description: 'This is {{ parameters.component_id }}'
|
||||
repoUrl: '{{ parameters.repoUrl }}'
|
||||
|
||||
- id: register
|
||||
name: Register
|
||||
action: catalog:register
|
||||
input:
|
||||
repoContentsUrl: '{{ steps.publish.output.repoContentsUrl }}'
|
||||
catalogInfoPath: '/catalog-info.yaml'
|
||||
|
||||
output:
|
||||
remoteUrl: '{{ steps.publish.output.remoteUrl }}'
|
||||
entityRef: '{{ steps.register.output.entityRef }}'
|
||||
@@ -1,12 +0,0 @@
|
||||
apiVersion: backstage.io/v1alpha1
|
||||
kind: Component
|
||||
metadata:
|
||||
name: {{cookiecutter.name | jsonify}}
|
||||
description: {{cookiecutter.description | jsonify}}
|
||||
annotations:
|
||||
github.com/project-slug: {{cookiecutter.destination.owner + "/" + cookiecutter.destination.repo}}
|
||||
backstage.io/techdocs-ref: dir:.
|
||||
spec:
|
||||
type: documentation
|
||||
lifecycle: experimental
|
||||
owner: {{cookiecutter.owner | jsonify}}
|
||||
@@ -1,28 +0,0 @@
|
||||
## {{ cookiecutter.name }}
|
||||
|
||||
{{ cookiecutter.description }}
|
||||
|
||||
## Getting started
|
||||
|
||||
Start write your documentation by adding more markdown (.md) files to this folder (/docs) or replace the content in this file.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
The Table of Contents on the right is generated automatically based on the hierarchy
|
||||
of headings. Only use one H1 (`#` in Markdown) per file.
|
||||
|
||||
## Site navigation
|
||||
|
||||
For new pages to appear in the left hand navigation you need edit the `mkdocs.yml`
|
||||
file in root of your repo. The navigation can also link out to other sites.
|
||||
|
||||
Alternatively, if there is no `nav` section in `mkdocs.yml`, a navigation section
|
||||
will be created for you. However, you will not be able to use alternate titles for
|
||||
pages, or include links to other sites.
|
||||
|
||||
Note that MkDocs uses `mkdocs.yml`, not `mkdocs.yaml`, although both appear to work.
|
||||
See also <https://www.mkdocs.org/user-guide/configuration/>.
|
||||
|
||||
## Support
|
||||
|
||||
That's it. If you need support, reach out in [#docs-like-code](https://discord.com/channels/687207715902193673/714754240933003266) on Discord.
|
||||
@@ -1,8 +0,0 @@
|
||||
site_name: {{cookiecutter.name | jsonify}}
|
||||
site_description: {{cookiecutter.description | jsonify}}
|
||||
|
||||
nav:
|
||||
- Introduction: index.md
|
||||
|
||||
plugins:
|
||||
- techdocs-core
|
||||
@@ -1,86 +0,0 @@
|
||||
apiVersion: backstage.io/v1beta2
|
||||
kind: Template
|
||||
metadata:
|
||||
name: docs-template
|
||||
title: Documentation Template
|
||||
description: Create a new standalone documentation project
|
||||
tags:
|
||||
- recommended
|
||||
- techdocs
|
||||
- mkdocs
|
||||
spec:
|
||||
owner: backstage/techdocs-core
|
||||
type: documentation
|
||||
|
||||
parameters:
|
||||
- title: Fill in some steps
|
||||
required:
|
||||
- name
|
||||
- description
|
||||
properties:
|
||||
name:
|
||||
title: Name
|
||||
type: string
|
||||
description: Unique name of the component
|
||||
ui:autofocus: true
|
||||
ui:options:
|
||||
rows: 5
|
||||
description:
|
||||
title: Description
|
||||
type: string
|
||||
description: A description for the component
|
||||
ui:options:
|
||||
rows: 5
|
||||
owner:
|
||||
title: Owner
|
||||
type: string
|
||||
description: Owner of the component
|
||||
ui:field: OwnerPicker
|
||||
ui:options:
|
||||
allowedKinds:
|
||||
- Group
|
||||
- title: Choose a location
|
||||
required:
|
||||
- repoUrl
|
||||
properties:
|
||||
repoUrl:
|
||||
title: Repository Location
|
||||
type: string
|
||||
ui:field: RepoUrlPicker
|
||||
ui:options:
|
||||
allowedHosts:
|
||||
- github.com
|
||||
|
||||
# This template is meant to be used on top of an existing tmeplate.
|
||||
# By adding the following and fetching from an absolute URL you can
|
||||
# add in the docs template
|
||||
steps:
|
||||
- id: fetch
|
||||
name: Template Docs Skeleton
|
||||
action: fetch:cookiecutter
|
||||
input:
|
||||
url: ./skeleton
|
||||
values:
|
||||
name: '{{ parameters.name }}'
|
||||
description: '{{ parameters.description }}'
|
||||
destination: '{{ parseRepoUrl parameters.repoUrl }}'
|
||||
owner: '{{ parameters.owner }}'
|
||||
|
||||
- id: publish
|
||||
name: Publish
|
||||
action: publish:github
|
||||
input:
|
||||
allowedHosts: ['github.com']
|
||||
description: 'This is {{ parameters.component_id }}'
|
||||
repoUrl: '{{ parameters.repoUrl }}'
|
||||
|
||||
- id: register
|
||||
name: Register
|
||||
action: catalog:register
|
||||
input:
|
||||
repoContentsUrl: '{{ steps.publish.output.repoContentsUrl }}'
|
||||
catalogInfoPath: '/catalog-info.yaml'
|
||||
|
||||
output:
|
||||
remoteUrl: '{{ steps.publish.output.remoteUrl }}'
|
||||
entityRef: '{{ steps.register.output.entityRef }}'
|
||||
@@ -1,77 +0,0 @@
|
||||
apiVersion: backstage.io/v1beta2
|
||||
kind: Template
|
||||
metadata:
|
||||
name: pull-request
|
||||
title: Pull Request Action template
|
||||
description: scaffolder v1beta2 template demo publishing to PR on existing git repository
|
||||
spec:
|
||||
owner: backstage/techdocs-core
|
||||
type: service
|
||||
|
||||
parameters:
|
||||
- title: Fill in some steps
|
||||
required:
|
||||
- name
|
||||
properties:
|
||||
name:
|
||||
title: Name
|
||||
type: string
|
||||
description: Unique name of the component
|
||||
ui:autofocus: true
|
||||
ui:options:
|
||||
rows: 5
|
||||
description:
|
||||
title: Description
|
||||
type: string
|
||||
description: Description of the component
|
||||
targetPath:
|
||||
title: Target Path in repo
|
||||
type: string
|
||||
description: Name of the directory to create in the repository
|
||||
- title: Choose a location
|
||||
required:
|
||||
- repoUrl
|
||||
properties:
|
||||
repoUrl:
|
||||
title: Repository Location
|
||||
type: string
|
||||
ui:field: RepoUrlPicker
|
||||
ui:options:
|
||||
allowedHosts:
|
||||
- github.com
|
||||
|
||||
steps:
|
||||
- id: fetch-base
|
||||
name: Fetch Base
|
||||
action: fetch:cookiecutter
|
||||
input:
|
||||
url: ./template
|
||||
values:
|
||||
name: '{{parameters.name}}'
|
||||
|
||||
- id: fetch-docs
|
||||
name: Fetch Docs
|
||||
action: fetch:plain
|
||||
input:
|
||||
targetPath: ./community
|
||||
url: https://github.com/backstage/community/tree/main/backstage-community-sessions
|
||||
|
||||
- id: publish
|
||||
name: Publish
|
||||
action: publish:github:pull-request
|
||||
input:
|
||||
repoUrl: '{{ parameters.repoUrl }}'
|
||||
title: 'Create new project: {{parameters.name}}'
|
||||
branchName: 'create-{{parameters.name}}'
|
||||
description: |
|
||||
# New project: {{parameters.name}}
|
||||
|
||||
{{#if parameters.description}}
|
||||
{{parameters.description}}
|
||||
{{/if}}
|
||||
targetPath: '{{#if parameters.targetPath}}{{parameters.targetPath}}{{else}}{{parameters.name}}{{/if}}'
|
||||
|
||||
output:
|
||||
links:
|
||||
- url: '{{steps.publish.output.remoteUrl}}'
|
||||
text: 'Go to PR'
|
||||
@@ -1,8 +0,0 @@
|
||||
apiVersion: backstage.io/v1alpha1
|
||||
kind: Component
|
||||
metadata:
|
||||
name: {{cookiecutter.name | jsonify}}
|
||||
spec:
|
||||
type: website
|
||||
lifecycle: experimental
|
||||
owner: user:guest
|
||||
@@ -1,174 +0,0 @@
|
||||
apiVersion: backstage.io/v1beta2
|
||||
kind: Template
|
||||
metadata:
|
||||
name: rails-demo
|
||||
title: Rails template
|
||||
description: scaffolder Rails app
|
||||
spec:
|
||||
owner: backstage/techdocs-core
|
||||
type: service
|
||||
|
||||
parameters:
|
||||
- title: Fill in some steps
|
||||
required:
|
||||
- name
|
||||
- owner
|
||||
properties:
|
||||
name:
|
||||
title: Name
|
||||
type: string
|
||||
description: Unique name of the component
|
||||
ui:autofocus: true
|
||||
ui:options:
|
||||
rows: 5
|
||||
owner:
|
||||
title: Owner
|
||||
type: string
|
||||
description: Owner of the component
|
||||
ui:field: OwnerPicker
|
||||
ui:options:
|
||||
allowedKinds:
|
||||
- Group
|
||||
system:
|
||||
title: System
|
||||
type: string
|
||||
description: System of the component
|
||||
ui:field: EntityPicker
|
||||
ui:options:
|
||||
allowedKinds:
|
||||
- System
|
||||
defaultKind: System
|
||||
|
||||
- title: Choose a location
|
||||
required:
|
||||
- repoUrl
|
||||
- dryRun
|
||||
properties:
|
||||
repoUrl:
|
||||
title: Repository Location
|
||||
type: string
|
||||
ui:field: RepoUrlPicker
|
||||
ui:options:
|
||||
allowedHosts:
|
||||
- github.com
|
||||
dryRun:
|
||||
title: Only perform a dry run, don't publish anything
|
||||
type: boolean
|
||||
default: false
|
||||
railsArguments:
|
||||
title: arguments to run the rails new command
|
||||
type: object
|
||||
properties:
|
||||
minimal:
|
||||
title: minimal
|
||||
description: Preconfigure a minimal rails app
|
||||
type: boolean
|
||||
skipBundle:
|
||||
title: skipBundle
|
||||
description: Don't run bundle install
|
||||
type: boolean
|
||||
skipWebpackInstall:
|
||||
title: skipWebpackInstall
|
||||
description: Don't run Webpack install
|
||||
type: boolean
|
||||
api:
|
||||
title: api
|
||||
description: Preconfigure smaller stack for API only apps
|
||||
type: boolean
|
||||
template:
|
||||
title: template
|
||||
description: Path to some application template (can be a filesystem path or URL)
|
||||
type: string
|
||||
default: './rails-template-file.rb'
|
||||
webpacker:
|
||||
title: webpacker
|
||||
description: 'Preconfigure Webpack with a particular framework (options: react,
|
||||
vue, angular, elm, stimulus)'
|
||||
type: string
|
||||
enum:
|
||||
- react
|
||||
- vue
|
||||
- angular
|
||||
- elm
|
||||
- stimulus
|
||||
database:
|
||||
title: database
|
||||
description: 'Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)'
|
||||
type: string
|
||||
enum:
|
||||
- mysql
|
||||
- postgresql
|
||||
- sqlite3
|
||||
- oracle
|
||||
- sqlserver
|
||||
- jdbcmysql
|
||||
- jdbcsqlite3
|
||||
- jdbcpostgresql
|
||||
- jdbc
|
||||
railsVersion:
|
||||
title: Rails version in Gemfile
|
||||
description: 'Set up the application with Gemfile pointing to a specific version
|
||||
(options: dev, edge, master)'
|
||||
type: string
|
||||
enum:
|
||||
- dev
|
||||
- edge
|
||||
- master
|
||||
|
||||
steps:
|
||||
- id: fetch-base
|
||||
name: Fetch Base
|
||||
action: fetch:rails
|
||||
input:
|
||||
url: ./template
|
||||
values:
|
||||
name: '{{ parameters.name }}'
|
||||
owner: '{{ parameters.owner }}'
|
||||
system: '{{ parameters.system }}'
|
||||
railsArguments: '{{ json parameters.railsArguments }}'
|
||||
|
||||
- name: Write Catalog information
|
||||
action: catalog:write
|
||||
input:
|
||||
component:
|
||||
apiVersion: 'backstage.io/v1alpha1'
|
||||
kind: Component
|
||||
metadata:
|
||||
name: '{{ parameters.name }}'
|
||||
annotations:
|
||||
github.com/project-slug: '{{ projectSlug parameters.repoUrl }}'
|
||||
spec:
|
||||
type: service
|
||||
lifecycle: production
|
||||
owner: '{{ parameters.owner }}'
|
||||
|
||||
- id: publish
|
||||
if: '{{ not parameters.dryRun }}'
|
||||
name: Publish
|
||||
action: publish:github
|
||||
input:
|
||||
allowedHosts: ['github.com']
|
||||
description: 'This is {{ parameters.name }}'
|
||||
repoUrl: '{{ parameters.repoUrl }}'
|
||||
|
||||
- id: register
|
||||
if: '{{ not parameters.dryRun }}'
|
||||
name: Register
|
||||
action: catalog:register
|
||||
input:
|
||||
repoContentsUrl: '{{ steps.publish.output.repoContentsUrl }}'
|
||||
catalogInfoPath: '/catalog-info.yaml'
|
||||
|
||||
- name: Results
|
||||
if: '{{ parameters.dryRun }}'
|
||||
action: debug:log
|
||||
input:
|
||||
listWorkspace: true
|
||||
|
||||
output:
|
||||
links:
|
||||
- title: Repository
|
||||
url: '{{ steps.publish.output.remoteUrl }}'
|
||||
- title: Open in catalog
|
||||
icon: 'catalog'
|
||||
entityRef: '{{ steps.register.output.entityRef }}'
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
gem_group :development, :test do
|
||||
gem "rspec"
|
||||
gem "rspec-rails"
|
||||
end
|
||||
|
||||
rakefile("example.rake") do
|
||||
<<-TASK
|
||||
namespace :example do
|
||||
task :backstage do
|
||||
puts "i like backstage!"
|
||||
end
|
||||
end
|
||||
TASK
|
||||
end
|
||||
@@ -1,13 +0,0 @@
|
||||
# editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
insert_final_newline = false
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user